我已经找到了很多方法,但是似乎没有简单而且好的方法来完成这个任务。我想要将Python的datetime
对象转换为类似于time.time()
返回的微秒(秒.微秒)。
最好的方法是什么?使用mktime()
会完全剥离微秒,你可以构建一个timedelta
,但这似乎并不正确。你也可以使用float(strftime("%s.%f"))
(正确地四舍五入秒),但那似乎是一种超级hack。
什么是正确的方法?
time.mktime(dt.timetuple()) + dt.microsecond / 1000000.0
如果你不想使用strftime
和float
,那么这个函数很有用。
它返回与dt = datetime.datetime.now()
和time.time()
相同的结果。
def microtime(dt):
unixtime = dt - datetime.datetime(1970, 1, 1)
return unixtime.days*24*60*60 + unixtime.seconds + unixtime.microseconds/1000000.0
time.time()
和 datetime.datetime.now()
不同。看起来你假设 dt
是 UTC,所以你会受到时区 UTC 偏移的影响。 - agftime.time()
是什么?我在文档中找不到它:http://docs.python.org/library/datetime.html - Mark Ransomdatetime.time
,而是 time.time()
-- http://docs.python.org/library/time.html#time.time - agftime
。你说得对,我的解决方案假设你传递的是UTC日期时间。 - Mark Ransomdatetime
/ time
/ calendar
是一团糟。 - agf导入时间模块;
microtime=int(time.time()*1000);
打印微秒时间;
calendar.timegm
,它给出的答案和Mark的版本一样 -- 这意味着对于非UTC的datetime
对象来说是不正确的。对于我来说,自纪元以来的时间与UTC中的某个人相同,而不是根据我的UTC偏移量而有所不同。 - agftime.time()
和calendar.timegm(datetime.datetime.now().utctimetuple())
对于非UTC时区不会给出相同的自纪元以来的时间,尽管自纪元以来已经过去了相同的时间,无论你谈论哪个时区,因为自纪元以来是UTC,而time.time()
返回UTC时间。 - agf