Python pytz:将本地时间转换为utc.Localize似乎没有转换

use*_*003 11 python timezone pytz

我有一个数据库,存储日期时间为UTC.我需要查询特定时间的信息,但日期和时间是在当地时间给出的,比如说'欧洲/哥本哈根'.我给这些作为:

year = 2012; month = 12; day = 2; hour = 13; min = 1;
Run Code Online (Sandbox Code Playgroud)

所以,我需要将这些转换为UTC,以便我可以在数据库中查找它们.我想用这个来做pytz.我在看localize:

 local_tz = timezone('Europe/Copenhagen')
 t = local_tz.localize(datetime.datetime(year, month, day, hour, min))
Run Code Online (Sandbox Code Playgroud)

但我很困惑localize().这是假设那一年等在当地时间给我的吗?或者,它是否假设它们是以UTC格式给出的,现在它已将它们转换为当地时间?

print t 给我:

2012-12-02 13:01:00+01:00
Run Code Online (Sandbox Code Playgroud)

所以它似乎假设原始年份等在utc; 小时现在是13 + 1而不是13.所以我该怎么做呢?我已经阅读了pytz文档,但这并没有让我更清楚.它提到了很多东西是棘手的,所以我不确定pytz是否真的解决了这些问题.而且,我并不总是知道这些例子是否向我展示了有效的东西或不起作用的东西.

我试过规范化:

print local_tz.normalize(t)
Run Code Online (Sandbox Code Playgroud)

这给了我与print t相同的结果.

编辑:使用上面给出的年份等数字,它应该与2012-12-2 12:01数据库中的信息相匹配.(因为那天哥本哈根是utc + 1)

Mar*_*ers 20

localize()将时区附加到当地时区的天真datetime.datetime实例中.

如果您在本地时区中有日期时间值,请将其本地化到该时区,然后使用.astimezone()将值转换为UTC:

>>> localdt = local_tz.localize(datetime.datetime(year, month, day, hour, min))
>>> localdt.astimezone(pytz.UTC)
datetime.datetime(2012, 12, 2, 12, 1, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要这样做,可以比较带有时区的datetime对象; 它们都将被标准化为UTC以进行测试:

>>> localdt.astimezone(pytz.UTC) == localdt
True
Run Code Online (Sandbox Code Playgroud)