有人可以解释一下我为什么不能得到相同的结果吗?
2017-10-25 20:10:50+01:35
此代码的输出为:import datetime,pytz
var1 = datetime.datetime(2017,10,25,20,10,50)
var1 = pytz.timezone("Europe/Athens").localize(var1)
print(var1)
2017-10-25 20:10:50+03:00
此代码的输出为:3:00
我的问题是为什么他们有不同的时区(1:35和3:00)。我知道第二个代码是真的,因为我的UTC是1:35
。但是你能告诉我为什么我会在第一个中获得use_frameworks!
source 'https://github.com/CocoaPods/Specs.git'
target 'ProjectName' do
pod 'AFNetworking', '~> 3.0'
# Pods for ProjectName
end
吗?
答案 0 :(得分:2)
tzinfo
对某些时区不起作用,这可能是导致错误结果的原因。
pytz doc:
不幸的是,对于许多时区,使用标准日期时间构造函数的'tzinfo参数''与pytz不起作用。
使用localize
或astimezone
是解决此问题的方法。 Doc说处理时间的首选方法是始终使用UTC,仅在生成输出以供人类阅读时转换为本地时间。
import datetime, pytz
localTimezone = pytz.timezone('Europe/Athens')
var1 = datetime.datetime(2017,10,25,20,10,50,tzinfo=pytz.utc)
loc_dt = var1.astimezone(localTimezone)
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
print(loc_dt.strftime(fmt))
这将打印
2017-10-25 23:10:50 EEST+0300
答案 1 :(得分:2)
没有问题,datetime
只是愉快地报告tzinfo
在任何参考框架中的偏移量。
默认情况下,pytz.timezone
不会给出UTC偏移量,而是LMT (local mean time)偏移量:
>>> pytz.timezone("Europe/Athens")
<DstTzInfo 'Europe/Athens' LMT+1:35:00 STD>
# ^^^-------------------- local mean time
但是当你本地化时:
>>> var1 = datetime.datetime(2017,10,25,20,10,50)
>>> var1 = pytz.timezone("Europe/Athens").localize(var1)
>>> var1.tzinfo
<DstTzInfo 'Europe/Athens' EEST+3:00:00 DST>
# ^^^^-------------------- eastern european summer time
现在报告了一个不同的偏移量,这次是基于EEST。
答案 2 :(得分:1)
在第二个代码中,您使用.localize()
,它接受一个天真的日期时间对象并将其解释为就像它在该时区中一样。它不会将时间转移到另一个时区。天真的日期时间对象没有时区信息,无法使该移动成为可能。
当 在第二个代码中将时间设为本地时,第二个代码中显示的时间是正确的。当您不在第一个代码中将时间设为本地时,显示的时间不正确。