Python日期时间到epoch

2024-09-28 17:19:52 发布

您现在位置:Python中文网/ 问答频道 /正文

t='20180515102500'
d=datetime.strptime(t, "%Y%m%d%H%M%S")
millis_since_epoch = int(time.mktime(d.timetuple())) * 1000
print(millis_since_epoch)

给我:1526379900000更换(python 3.6.1) 和 在我的本地:1526397900000(python 2.7.14)

为什么? 将datetime对象转换为epoch的推荐方法是什么?在


Tags: 对象方法datetimetimeintprintsinceepoch
3条回答

试试这个:

t='20180515102500'
d=datetime.datetime.strptime(t, "%Y%m%d%H%M%S")
print(d)
epoch = datetime.datetime.utcfromtimestamp(0)


def unix_time_millis(dt):
  return (dt - epoch).total_seconds() * 1000

unix_time_millis(d)

如果有帮助,请告诉我!在

在python 3.6中:

datetime.timestamp()

例如:

^{pr2}$

您的问题是您使用的是datetime(和struct_tm等)对象。所以你要问的是2018年5月15日10:25:00“不管这台机器上的本地时区是什么”中的“Unix纪元”有多远。如果你在两台时区相隔5小时的机器上运行它,你会得到相隔5*3600*1000毫秒的结果。在

建议的方法是:

d.timestamp() # returns difference from epoch as float seconds

…或:

^{pr2}$

(很明显,如何将这些值转换为浮点数,或者您需要的任何其他值。)

但这两种方法在这里都没有任何区别,因为您仍然使用天真的datetime对象。(至少您没有混入time模块中的其他类型并放弃精度,但您没有解决您的问题。)


问题的解决取决于你想做什么。这些是UTC时间戳吗?它们是在某个已知时区的时间戳吗?在

如果一切都是UTC,最好的做法是显式地创建UTC对象,但最简单的事情(尤其是需要在2.7中运行代码的情况下)是:

d - datetime.utcfromtimestamp(0)

这将给您一个表示自纪元起0 UTC秒的原始日期时间,并从表示纪元以来X UTC秒的原始日期时间中减去它,这样您就得到了一个表示X秒的timedelta,而不管系统使用的是哪个时区。在

或者,对现有代码的最小更改是使用utctimetuple而不是{},这将以更复杂的方式执行相同的操作。在

相关问题 更多 >