在下面的代码中,我正在计算当前时期和当前一天的开始时期。
将epochs转换为CDT时区的时间戳: 1346187141 - 2012年8月28日15:52:21, 1346137200 - 2012年8月28日02:00:00
我希望第二个epoch是当天的开始,但是它是凌晨2点。看起来在转换为epoch时仍然使用本地时区PST。
我做错了什么?还是有其他方法可以实现?
谢谢!
import time
import pytz
from datetime import datetime
tz1 = pytz.timezone('CST6CDT')
utc = pytz.timezone('UTC')
now = pytz.UTC.localize(datetime.utcnow())
now_tz = now.astimezone(tz1)
print now_tz
print now_tz.strftime('%s')
begin_day = now_tz.replace(hour=0, minute=0, second=0)
print begin_day
print begin_day.strftime('%s')
打印语句:
2012-08-28 13:52:21.595718-05:00
1346187141
2012-08-28 00:00:00.595718-05:00
1346137200
将epochs转换为CDT时区的时间戳: 1346187141 - 2012年8月28日15:52:21, 1346137200 - 2012年8月28日02:00:00
我希望第二个epoch是当天的开始,但是它是凌晨2点。看起来在转换为epoch时仍然使用本地时区PST。
我做错了什么?还是有其他方法可以实现?
谢谢!
America/Chicago
代替CST6CST
。 tzdb中仅有少数POSIX时区,它们只是为了向后兼容性支持而存在。 - Matt Johnson-Pintreplace
之后进行归一化是一件好事,即使它不会改变最终答案。(2)虽然将本地时间转换为遵循DST的时区可能会产生模糊或不存在的日期,但是将本地时间转换为UTC永远不会有任何困难,因为UTC不遵循DST。因此,utc.localize
始终是安全的,因此在上面的代码中不需要is_dst=None
。 - unutbubegin_day
在 你的示例 中处于不一致状态:拆分时间与 tzname、utcoffset 不对应(错误的 tzinfo)。我不知道哪个实现的怪癖使得utctimetuple()
的值相等,而 un/normalized 日期的 utcoffset() 不同。(2) UTC 是一个特殊情况(相同的 UTC 偏移,始终如一)。在这种情况下,您不需要使用localize()
,可以直接使用tzinfo
参数,例如datetime(1970, 1, 1, tzinfo=pytz.utc)
。 - jfs.normalize()
函数调用(“标准”表示法)表明begin_day
不是一个午夜时间。在2002-10-27
当地时间(美国东部),午夜时间是一个不同的时间点(midnight = tz.localize(datetime(2002, 10, 27), is_dst=None)
)。也就是说,你的答案可能会产生错误的结果。 - jfs