【发布时间】:2015-07-03 09:44:57
【问题描述】:
所以我有两个函数用于将 python datetime.datetime() 对象转换为毫秒数。我无法弄清楚这是哪里出了问题。这是我正在使用的:
>>> import datetime
>>> def mil_to_date(mil):
"""date items from REST services are reported in milliseconds,
this function will convert milliseconds to datetime objects
Required:
mil -- time in milliseconds
"""
if mil == None:
return None
elif mil < 0:
return datetime.datetime.utcfromtimestamp(0) + datetime.timedelta(seconds=(mil/1000))
else:
return datetime.datetime.fromtimestamp(mil / 1000)
>>> def date_to_mil(date):
"""converts datetime.datetime() object to milliseconds
date -- datetime.datetime() object"""
if isinstance(date, datetime.datetime):
epoch = datetime.datetime.utcfromtimestamp(0)
return long((date - epoch).total_seconds() * 1000.0)
>>> mil = 1394462888000
>>> date = mil_to_date(mil)
>>> date
datetime.datetime(2014, 3, 10, 9, 48, 8) #this is correct
>>> d2m = date_to_mil(date)
>>> d2m
1394444888000L
>>> mil
1394462888000L
>>> date2 = mil_to_date(d2m)
>>> date2
datetime.datetime(2014, 3, 10, 4, 48, 8) #why did I lose 5 hours??
由于某种原因,我失去了 5 个小时。我是否忽略了一些明显的东西?还是我的一项或两项功能有问题?
【问题讨论】:
-
这是因为
fromtimestamp返回本地时间:“如果可选参数tz为None或未指定,则时间戳转换为平台的本地日期和时间,返回的datetime对象是naive” -
无关:
timedelta(milliseconds=mil)工作。 -
无关:即使结果是
long,你也可以使用int(2**300)。 -
1394462888000 != 1394444888000
标签: python python-2.7 datetime