【问题标题】:Datetime and Pytz Timezone .weekday() issue日期时间和 Pytz 时区 .weekday() 问题
【发布时间】:2017-09-30 15:00:40
【问题描述】:

我在尝试为订单创建特定createdAt 日期时间的直方图时遇到了问题。问题是即使在创建了时区感知日期时间之后,.weekday() 也会显示为同一天,即使它应该是不同的时间

我用来测试这种情况的代码如下:

import datetime
import pytz

value = {
    'createdAt': '2017-04-24T00:48:03+00:00'
}
created_at = datetime.datetime.strptime(value['createdAt'], '%Y-%m-%dT%H:%M:%S+00:00')

timezone = pytz.timezone('America/Los_Angeles')

created_at_naive = created_at
created_at_aware = timezone.localize(created_at_naive)

print(created_at_naive) # 2017-04-24 00:48:03
print(created_at_aware) # 2017-04-24 00:48:03-07:00
print(created_at_naive.weekday()) # 0 (Monday)
print(created_at_aware.weekday()) # 0 (should be Sunday)

【问题讨论】:

    标签: datetime pytz


    【解决方案1】:

    问题是您实际上需要将日期时间更改为新时区:

    >>> timezone('UTC').localize(created_at)
    datetime.datetime(2017, 4, 24, 0, 48, 3, tzinfo=<UTC>)
    
    >>>timezone('UTC').localize(created_at).astimezone(timezone('America/Los_Angeles'))
    datetime.datetime(2017, 4, 23, 17, 48, 3, tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>)
    

    【讨论】:

    • 哦!这完全有道理。我们需要假设原始时间是 UTC,然后才能看到 'America/Los_Angeles' 时区的 UTC 时间。非常感谢!除了你的页面,我在任何地方都找不到这个答案!顺便说一句,我相信pytz.utc也和说pytz.timezone('UTC')是一样的
    猜你喜欢
    • 2019-04-06
    • 2015-02-16
    • 2019-01-31
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多