1

次のように 13 日を減算する datetime オブジェクトを作成しました。

(date.today()-timedelta(days=13)).strftime('%Y-%m-%d')

午前 6 時と午前 8 時 30 分にコードを実行すると、異常が発生します。午前 6 時に、結果の文字列は次のように返されます (今日が 2012-02-29 の場合):

2012-02-15

現在の14日前です!ただし、午前 8 時 30 分に同じ行を実行すると、結果の文字列は次のように返されます。

2012-02-16

それなら正しい。これまでのところ、短い期間の違いが何であるかを理解できませんでした。それが重要な場合は、タイムゾーンの単純な日時オブジェクトを使用します。結果の文字列日付でこの変更が発生する原因を知りたいです。

どうもありがとう。

編集:(以下のeumiroの提案に基づく)

datetime.datetime.now() は以下を返します:

>>> datetime.datetime(2012, 2, 29, 10, 46, 20, 659862) 

また、タイムゾーンは、サーバー上およびコード行を実行する django アプリケーションでは Europe/Vienna です。

また、あなたが提案したものと同様の行を実行してみました:

(pytz.timezone(settings.TIME_ZONE).localize(datetime.now(), is_dst=True) - \
    timedelta(days=13)).strftime('%Y-%m-%d') 

しかし、同じ結果が得られました...そのため、タイムゾーンとはあまり関係がないと思います。しかし同時に、他にどこを見ればよいのかわからない。

4

2 に答える 2

0

残念ながら、DST は Python ではあまりサポートされていません。

pytz でさえ完璧ではありませんが、ハックで動作させることができます。

10 日午後 1 時から 2 日を引くことが何を意味するのか、2 暦日、48 時間、または 172800 秒のいずれかを決定する必要があります。

于 2012-02-29T10:15:13.370 に答える