在下面的代码中,我正在计算现在的纪元和当天的纪元开始。

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

使用CDT时区将纪元转换为时间戳:
1346187141-2012年8月28日15:52:21,
1346137200-2012年8月28日02:00:00

我希望第二个纪元是一天的开始,但是现在是凌晨2点。转换为新纪元时,它似乎仍在使用本地时区PST。

我究竟做错了什么 ?还是可以用其他方式做到这一点?

谢谢!

最佳答案

注意:我的回答是绝对错误的。 (我想将其删除,但是在删除accept标志之前无法删除它。)

请参阅J.F.Sebastian's answer

下面的代码演示了now_tz的值,我们的两种方法为此产生了不同的结果。

import calendar
import pytz
import datetime as dt

tz1 = pytz.timezone('US/Eastern')
utc = pytz.timezone('UTC')
now = utc.localize(dt.datetime(2002, 10, 28), is_dst=None)
now_tz = now.astimezone(tz1)
now_epoch = calendar.timegm(now_tz.utctimetuple())
begin_day = tz1.normalize(now_tz.replace(hour=0, minute=0, second=0))

midnight = tz1.localize(dt.datetime.combine(now_tz, dt.time(0, 0)), is_dst=None)
if begin_day != midnight:
    print(begin_day)
    # 2002-10-27 01:00:00-04:00  # my result -- is not midnight
    print(midnight)
    # 2002-10-27 00:00:00-04:00  # J.F.Sebastian's result is correct

(原始答案已编辑)

关于python-带有时区的日期时间到纪元,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12165691/

10-09 22:15