要将
numpy.datetime64日期时间对象转换为代表UTC时间的日期时间对象,请执行以下 *** 作
numpy-1.8:
>>> from datetime import datetime>>> import numpy as np>>> dt = datetime.utcnow()>>> dtdatetime.datetime(2012, 12, 4, 19, 51, 25, 362455)>>> dt64 = np.datetime64(dt)>>> ts = (dt64 - np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's')>>> ts1354650685.3624549>>> datetime.utcfromtimestamp(ts)datetime.datetime(2012, 12, 4, 19, 51, 25, 362455)>>> np.__version__'1.8.0.dev-7b75899'
上面的示例假定原始日期时间对象np.datetime64在UTC中被解释为时间。
要将datetime转换为
np.datetime64并返回(numpy-1.6):
>>> np.datetime64(datetime.utcnow()).astype(datetime)datetime.datetime(2012, 12, 4, 13, 34, 52, 827542)
它既可用于单个np.datetime64对象,又可用于np.datetime64的numpy数组。
想想np.datetime64的方式与处理np.int8,np.int16等的方式相同,并应用相同的方法在Python对象(如int,datetime和相应的numpy对象)之间转换甜菜。
您的“讨厌的例子”可以正常工作:
>>> from datetime import datetime>>> import numpy >>> numpy.datetime64('2002-06-28T01:00:00.000000000+0100').astype(datetime)datetime.datetime(2002, 6, 28, 0, 0)>>> numpy.__version__'1.6.2' # current version available via pip install numpy
我可以将安装时的long值复制numpy-1.8.0为:
pip install git+https://github.com/numpy/numpy.git#egg=numpy-dev
相同的例子:
>>> from datetime import datetime>>> import numpy>>> numpy.datetime64('2002-06-28T01:00:00.000000000+0100').astype(datetime)1025222400000000000L>>> numpy.__version__'1.8.0.dev-7b75899'
它long之所以返回,是因为for numpy.datetime64类型.astype(datetime)等于在.astype(object)上返回Python整数(long)numpy-1.8。
要获取日期时间对象,您可以:
>>> dt64.dtypedtype('<M8[ns]')>>> ns = 1e-9 # number of seconds in a nanosecond>>> datetime.utcfromtimestamp(dt64.astype(int) * ns)datetime.datetime(2002, 6, 28, 0, 0)
要获取直接使用秒的datetime64:
>>> dt64 = numpy.datetime64('2002-06-28T01:00:00.000000000+0100', 's')>>> dt64.dtypedtype('<M8[s]')>>> datetime.utcfromtimestamp(dt64.astype(int))datetime.datetime(2002, 6, 28, 0, 0)
该numpy的文档说,日期时间API是实验性的,并在未来的版本中numpy的可能改变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)