我有一个约会,我需要让时区知道.
local_tz = timezone('Asia/Tokyo')
start_date = '2012-09-27'
start_date = datetime.strptime(start_date, "%Y-%m-%d")
start_date = start_date.astimezone(local_tz)
now_utc = datetime.now(timezone('UTC'))
local_now = now_utc.astimezone(local_tz)
Run Code Online (Sandbox Code Playgroud)
我需要找到这是否属实:
print start_date>local_now
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误.
start_date = start_date.astimezone(local_tz)
ValueError: astimezone() cannot be applied to a naive datetime
Run Code Online (Sandbox Code Playgroud)
我将utc转换为tokyo没有任何问题.我需要在东京做好start_date时区感知广告.
谢谢
>>> import pytz
>>> pytz.timezone('Asia/Hong_Kong')
<DstTzInfo 'Asia/Hong_Kong' LMT+7:37:00 STD>
Run Code Online (Sandbox Code Playgroud)
7小时37分钟的偏移量?这有点奇怪,有没有人遇到同样的问题?
事实上,我之间的行为有所不同
import pytz
from datetime import datetime
hk = pytz.timezone('Asia/Hong_Kong')
dt1 = datetime(2012,1,1,tzinfo=hk)
dt2 = hk.localize(datetime(2012,1,1))
if dt1 > dt2:
print "Why?"
Run Code Online (Sandbox Code Playgroud) 我尝试使用datetime和pytz在python中创建一个datetime对象,显示的偏移是错误的.
import datetime
from pytz import timezone
start = datetime.datetime(2011, 6, 20, 0, 0, 0, 0, timezone('Asia/Kolkata'))
print start
Run Code Online (Sandbox Code Playgroud)
显示的输出是
datetime.datetime(2011, 6, 20, 0, 0, tzinfo=<DstTzInfo 'Asia/Kolkata' HMT+5:53:00 STD>)
Run Code Online (Sandbox Code Playgroud)
请注意,'Asia/Kolkata'是IST,GMT + 5:30,而不是HMT + 5:53.这是一个标准的linux时区,为什么我会弄错,我该如何解决呢?
我有一个问题比较输出与dateutil和pytz.我正在创建一个有意识的日期时间对象(UTC),然后转换为给定的时区,但我得到了不同的答案.我怀疑dateutil有时会给出错误的结果,因为它考虑到夏令时有问题(至少,我读过它的评论),但我找不到确认或修复该问题.这是代码:
import dateutil
u = dateutil.tz.tzutc()
date1 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u)
# 2010-05-02 11:10:00+00:00
u2 = dateutil.tz.gettz('America/Chicago')
date2 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u2)
# 2010-05-02 11:10:00-05:00
import pytz
u = pytz.timezone('UTC')
date1 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u)
# 2010-05-02 11:10:00+00:00
u2 = pytz.timezone('America/Chicago')
date2 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u2)
# 2010-05-02 11:10:00-06:00
Run Code Online (Sandbox Code Playgroud)
那么,这可能是什么问题?
我刚试过这个:
print u2.normalize(date1.astimezone(u2))
# 2010-05-02 06:10:00-05:00
Run Code Online (Sandbox Code Playgroud)
pytz需要normalize考虑DST吗?
好像pytz和dateutil似乎没有给出America/Argentina/San_Luis的答案,但这有效:
import pytz, …Run Code Online (Sandbox Code Playgroud) >>> import pytz
>>> tz = pytz.timezone('America/Chicago')
>>> dt_naive = datetime(year=2017, month=6, day=6)
>>> dt_aware = tz.localize(dt_naive)
>>> dt_aware.tzinfo == tz
False
Run Code Online (Sandbox Code Playgroud)
这些不同的原因是什么?
>>> dt_aware.tzinfo
<DstTzInfo 'America/Chicago' CDT-1 day, 19:00:00 DST>
>>> tz
<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD>
Run Code Online (Sandbox Code Playgroud)