PyTZ часовой пояс DST выпуск - PullRequest
0 голосов
/ 01 ноября 2018

Я передаю две наивные даты в форму. Затем, используя 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:00, как start_date?

1 Ответ

0 голосов
/ 01 ноября 2018

America / New_York - это не то же самое, что EST. Первый корректирует с учетом перехода на летнее время. Последний установлен на восточное стандартное время. Использование:

est = pytz.timezone('EST')
...