Python 时区转换将分钟加到小时?
Python timezone conversion adding minutes to the hour?
所以我正在尝试将给定时区的大量时间(10:00:00、14:00:00 等)转换为 UTC。
当我这样做的时候,我总是疯狂地得到像“15:51:00”这样的东西。
当您到达该行并打印它正在使用的值时,它使用的是:
1900-01-01 12:00:00-05:51
很好,除了 -05:51 位。我不知道为什么 -05:51 在那里,这给我带来了问题。 UTC 转换是按小时计算的,是吗?我认为这与我的时区转换有关,但我真的不明白他们为什么要那样做。
这是一个具有相同错误输出的最小示例;它 returns 15:51:00
应该 return 一个小时,没有分钟。
import datetime
from dateutil import tz
jj = datetime.datetime.strptime("10:00:00", "%H:%M:%S")
tzz = tz.gettz('US/Central')
def constructstring(tzz,x):
inter2 = x.replace(tzinfo=tzz) #ERROR HAPPENS HERE (I'm pretty sure anyways)
inter3 = inter2.astimezone(tz.tzutc())
return inter3
print(constructstring(tzz,jj).strftime("%H:%M:%S"))
创建 jj
日期时间对象时未指定日期,因此使用默认日期 1900-01-01。时区不是固定的实体;它们会随着时间而改变,US/Central 时区在 1900 年使用了不同的偏移量。
至少,使用最近的日期,例如今天:
# use today's date, with the time from jj, and a given timezone.
datetime.datetime.combine(datetime.date.today(), jj.time(), tzinfo=tzz)
如果您只需要 time,那么不要创建 datetime
对象来存储它们; datetime
模块有一个专用的 time()
对象。我也不会使用 strftime()
从文字创建对象。使用构造函数传入整数即可:
jj = datetime.time(10, 0, 0) # or just .time(10)
其他好的经验法则:如果您必须处理带时区的日期,请尝试在您的代码接收或加载它们时将它们移动到 UTC 中的 datetime
对象。如果您只有一天中的某个时间,但仍需要时区支持,请将它们附加到今天的日期,这样您就可以获得正确的时区。尽可能晚地再次转换为字符串。
所以我正在尝试将给定时区的大量时间(10:00:00、14:00:00 等)转换为 UTC。
当我这样做的时候,我总是疯狂地得到像“15:51:00”这样的东西。
当您到达该行并打印它正在使用的值时,它使用的是:
1900-01-01 12:00:00-05:51
很好,除了 -05:51 位。我不知道为什么 -05:51 在那里,这给我带来了问题。 UTC 转换是按小时计算的,是吗?我认为这与我的时区转换有关,但我真的不明白他们为什么要那样做。
这是一个具有相同错误输出的最小示例;它 returns 15:51:00
应该 return 一个小时,没有分钟。
import datetime
from dateutil import tz
jj = datetime.datetime.strptime("10:00:00", "%H:%M:%S")
tzz = tz.gettz('US/Central')
def constructstring(tzz,x):
inter2 = x.replace(tzinfo=tzz) #ERROR HAPPENS HERE (I'm pretty sure anyways)
inter3 = inter2.astimezone(tz.tzutc())
return inter3
print(constructstring(tzz,jj).strftime("%H:%M:%S"))
创建 jj
日期时间对象时未指定日期,因此使用默认日期 1900-01-01。时区不是固定的实体;它们会随着时间而改变,US/Central 时区在 1900 年使用了不同的偏移量。
至少,使用最近的日期,例如今天:
# use today's date, with the time from jj, and a given timezone.
datetime.datetime.combine(datetime.date.today(), jj.time(), tzinfo=tzz)
如果您只需要 time,那么不要创建 datetime
对象来存储它们; datetime
模块有一个专用的 time()
对象。我也不会使用 strftime()
从文字创建对象。使用构造函数传入整数即可:
jj = datetime.time(10, 0, 0) # or just .time(10)
其他好的经验法则:如果您必须处理带时区的日期,请尝试在您的代码接收或加载它们时将它们移动到 UTC 中的 datetime
对象。如果您只有一天中的某个时间,但仍需要时区支持,请将它们附加到今天的日期,这样您就可以获得正确的时区。尽可能晚地再次转换为字符串。