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

2024-09-30 06:26:49 发布

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

亚洲/加尔各答时区的时间为8/8/20, 8:00%m/%d/%y, %H:%M格式)。我首先将datetime转换为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

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


Tags: https脚本comdatetimetimemywww格式
2条回答

我就是这样解决的

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)

如果将tzinfo替换为timezone.utc,Python将假定8/8/20, 8:00UTC。你想要的是astimezone()。如果您没有通过时区,它将自动使用您机器的本地时间[docs]

from datetime import datetime, timezone
timerangestart = '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)的datetime对象属于本地时间,因此您甚至可以省略.astimezone()!但是,我更喜欢设置时区,以便更清楚发生了什么

如果您想检查另一个时区,可以使用dateutil和例如write

from dateutil.tz import gettz

my_time = datetime.strptime(timerangestart, '%m/%d/%y, %H:%M').replace(tzinfo=gettz('US/Eastern'))
ts_ms = my_time.timestamp() * 1000

相关问题 更多 >

    热门问题