【问题标题】:pytz timezone DST issuepytz 时区 DST 问题
【发布时间】:2019-04-06 00:50:16
【问题描述】:

我将两个天真的日期传递给一个表单。然后使用 pytz 确保时区设置为 EST。但是,它会导致错误。我猜这是由于 DST 问题。日期和 DST 令人困惑。有人可以告诉我如何制作“夏令时证明”吗?

from rest_framework import serializers
from datetime import datetime
import pytz


class SearchForm(serializers.Serializer):
    start_date = serializers.DateField(required=True)
    end_date = serializers.DateField(required=False)

    def save(self):
        # Doesn't actually save, 
        start_date = self.validated_data['start_date']
        end_date = self.validated_data['end_date']

        # Convert dates to EST timezone
        est = pytz.timezone('America/New_York')
        start_date = datetime.combine(start_date, time.min).astimezone(est)
        end_date = datetime.combine(end_date, time.max).astimezone(est)

        print(f'Start date: {start_date} => {start_date.tzinfo}')
        print(f'End date: {end_date} => {end_date.tzinfo}')

        assert start_date.tzinfo == end_date.tzinfo

        # Filter based on timeframe
        qs = self.filter_timeframe(qs, start_date, end_date)

        return SearchSerializer(qs, many=True)

start_date 作为“2018-11-1”和end_date 作为“2018-11-5”传递会导致AssertionError。打印出日期会导致:

Start date: 2018-11-01 00:00:00-04:00 => America/New_York
End date: 2018-11-05 23:59:59.999999-05:00 => America/New_York

问题是为什么end_date 时区是-05:00 而不是-04:00start_date

【问题讨论】:

    标签: python pytz


    【解决方案1】:

    America/New_York 与 EST 不同。前者针对夏令时进行调整。后者固定为东部标准时间。 使用:

    est = pytz.timezone('EST')
    

    【讨论】:

    • 认为我开明了。认为这与 EST 相同,但我显然错了。问题解决了。
    猜你喜欢
    • 2014-01-17
    • 2013-03-05
    • 2011-02-09
    • 2017-09-30
    • 2012-11-30
    • 2015-06-13
    • 2019-05-23
    • 2019-04-16
    • 2015-01-06
    相关资源
    最近更新 更多