将“亚洲/加尔各答”时区日期时间转换为自纪元以来的毫秒数时出错

亚洲/加尔各答时区的时间为8/8/20, 8:00(%m/%d/%y, %H:%M格式)。我首先将日期时间转换为 UTC 时区,然后更改为毫秒。我将结果与在线(https://www.epochconverter.com/)进行了比较,值存在一些差异。


亚洲/加尔各答时区日期时间(输入):8/8/20、8:00

UTC 时区日期时间:8/8/20、2:30

自纪元以来的毫秒计算值:1596873600000

自纪元以来的毫秒实际值:1596853800000


Python 脚本:


my_time = datetime.strptime(timerangestart, '%m/%d/%y, %H:%M')

timestart = my_time.replace(tzinfo=timezone.utc).timestamp()

timestart = timestart * 1000

我做错了什么?我可以得到一些帮助吗?


ibeautiful
浏览 187回答 2
2回答

达令说

如果替换tzinfo为timezone.utc,Python 将假定8/8/20, 8:00 为UTC。你想要的是astimezone()。如果你不传递时区,它会自动使用你机器的本地时间[docs]。from datetime import datetime, timezonetimerangestart = '8/8/20, 8:00'# parse the string and localize to your time zone (OS setting):my_time = datetime.strptime(timerangestart, '%m/%d/%y, %H:%M').astimezone() ts_ms = my_time.timestamp() * 1000 # no need to convert to UTC; UNIX time (should) always refer to UTC请注意,默认情况下,Python 会假定没有时区 (tzinfo=None) 的日期时间对象属于当地时间 - 因此您甚至可以省略 .astimezone()!但是,我更愿意设置时区,以便更清楚地了解正在发生的事情。如果你想检查另一个时区,你可以使用dateutil和例如写from dateutil.tz import gettzmy_time = datetime.strptime(timerangestart, '%m/%d/%y, %H:%M').replace(tzinfo=gettz('US/Eastern'))ts_ms = my_time.timestamp() * 1000

倚天杖

我就是这样解决的timerangestart = '8/8/20, 8:00'my_time = datetime.strptime(timerangestart, '%m/%d/%y, %H:%M')timerangestart = pytz.timezone("Asia/Kolkata").localize(my_time).astimezone(pytz.timezone("UTC")) timestart = int(timerangestart.timestamp() * 1000)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python