2016-08-26 4 views
1

私はpythonライブラリsimple-dateを使用しています。私は、UTC日付を表す文字列で初期化することによってSimpleDateオブジェクトを作成しました。 timedeltaを使って日数を追加しようとするとうまくいくように見えますが、印刷しようとすると無限に繰り返されます。私はデバッガでpを加えた結果のオブジェクトを検査し、何も表示しませんでした。型はSimpleDateですが、何とか空に見えます。 UTC文字列を使用しないとうまくいきます。UTCから作成されたSimpleDate Pythonオブジェクトに日を追加する際の無限再帰

何か間違っていますか?

マイコード:だから

from simpledate import SimpleDate 
from datetime import timedelta 

# This works 
day = '2016-06-01 00:00:00' 
later = SimpleDate(day) + timedelta(days=10) 
print(later) 

# This works 
day = '2016-06-01 00:00:00' 
later = SimpleDate(day) + timedelta(days=10) 
print(later) 

# The print statement will cause infinite recursion 
day = '2016-06-01 00:00:00' 
later = SimpleDate(day, tz='UTC') + timedelta(days=10) 
print(later) 

# The print statement will cause infinite recursion 
day = '2016-06-01 00:00:00UTC' 
later = SimpleDate(day) + timedelta(days=10) 
print(later) 
+0

私はPython 3.5と[simple-date](https://pypi.python.org/pypi/simple-date)を使用しています –

+4

こんにちは、これは単純な日付の作者です。これはバグのように聞こえる、申し訳ありません!私は今週末それを修正しようとし、完了したらここに投稿します。 –

+0

私はこれを理解していますが、いくつかのテストを行う前に明日または日曜日になるでしょう、新しいリリースを構築するなど、すぐに回避するには、UTC datetimeのutc属性を使用します:later = SimpleDate(day、tz = 'UTC')。utc + timedelta(days = 10)なぜ私は後で詳細な説明を投稿します。 –

答えて

1

、ここでは2つの問題がありました。

最初は説明が簡単です。特定のエラーのメッセージを生成すると、報告しようとしたのと同じエラーが発生しました。その結果、新しいメッセージが生成され、新しいエラーが発生し、最終的にスタックが使い尽くされました。これで修正されました。

タイムゾーンが複雑なので、2番目の説明は説明が難しいです。ですから、わかりやすい例を挙げて始めます。 PDT(太平洋夏時間)にこの日付を考慮してください。

 
>>> SimpleDate('2016-08-28', tz='PDT') 
SimpleDate('2016-08-28') 

我々はそれに6ヶ月を追加した場合、我々は冬の真ん中になります。 PDTでもが存在しません(冬です)!だから我々は、エラーを取得:

 
>>> SimpleDate('2016-08-28', tz='PDT') + timedelta(days=180) 
simpledate.SingleInstantTzError: Attempted to use PDT, defined only for 2016-08-28 07:00:00+00:00 

今、あなたはSimpleDateはPDTが終了したときに知っているのに十分にスマートであることを主張することができます。しかし、そうではありません(そしてアフリカだけではデータがありませんが、私は間違っているかもしれません)。代わりに、SimpleDate は、有効期間が限定されている可能性のあるタイムゾーンに関連付けられた日付の変更を拒否します。それが「一瞬」という意味です。

詳しくはthe documentationを参照してください。

ただし、この場合、タイムゾーンはUTCでした。それが常に有効であることはわかっています。そこで、UTCの解析時にこの制限を回避する特別なケースを追加しました。

 
>>> SimpleDate('2016-08-28', tz='UTC') + timedelta(days=180) 
SimpleDate('2017-02-24', tz='UTC') 

これはリリース0.5.0のPyPIになりました。遅れて申し訳ありません - いくつかのテストは失敗していました。私は新しいバグを見つけましたので、余分な作業が必要でした。

+0

恐ろしい!今はとてもうまくいく!私の問題は修正されました!大変ありがとう! –

関連する問題