因此,我试图将一小时(10:00:00、14:00:00等)从给定时区转换为UTC。
这样做的时候,我一直在疯狂地取回东西,例如“ 15:51:00”。
到达该行并打印其使用的值时,它会使用类似的东西:
1900-01-01 12:00:00-05:51
除了-05:51位之外,哪个都可以。我不知道为什么-05:51在那里,这给我带来了麻烦。 UTC转换是小时到小时,是吗?我认为这与我的时区转换有关,但我真的不知道为什么他们会这样做。
这是一个具有相同错误输出的最小示例;当它只应返回固定时间(无分钟)时,它将返回15:51:00
。
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"))
答案 0 :(得分:2)
创建jj
日期时间对象时未指定日期,因此使用默认日期1900-01-01。时区不是固定的实体;它们会随着时间而变化,而美国/中央时区在1900年使用了不同的偏移量。
至少要使用一个最近的日期,例如 today 例如:
# use today's date, with the time from jj, and a given timezone.
datetime.datetime.combine(datetime.date.today(), jj.time(), tzinfo=tzz)
如果您只需要时间 ,则不要创建datetime
对象来存储这些对象; datetime
模块具有专用的time()
对象。我也不会使用strftime()
从文字中创建对象。只需使用构造函数来传递整数:
jj = datetime.time(10, 0, 0) # or just .time(10)
其他好的经验法则:如果必须处理带有时区的日期,请尝试在代码接收或加载时将其移动到UTC中的datetime
对象。如果您只有一天中的某个时间,但仍需要时区支持,请将它们附加到今天的日期,这样您就可以获得正确的时区。仅在尽可能晚的时候再次转换为字符串。