28

紀元前の日付を広範囲に処理する必要がある Python を使用したアプリの構築に着手しています (DB での保存と取得、計算の実行)。ほとんどの日付は、「紀元前 2000 年頃」など、さまざまな不確実性があります。

私は、Python の datetime ライブラリが 1 AD からの日付のみを処理することを知っています。

これまでのところFlexiDateしか見つかりませんでした。他のオプションはありますか?

編集:おそらく最善の方法は、それらを文字列として保存し(基本データ型として文字列を使用)、-提案されているように-数値的に意味のあるカスタム日時クラスを使用することです。ほとんどの場合、日付は 1 年のみで構成されているようです。「紀元前 500 年頃」、「紀元前 1600 年から紀元前 1500 年の間」、「紀元前 1800 年以前」など、解決すべき興味深い問題がいくつかあります。

4

4 に答える 4

4

興味深い質問です。そのようなクラスがまだ存在しないのは奇妙に思えます (re @joel Cornett のコメント) 年単位でのみ作業する場合は、カレンダーの日付ではなく整数を処理するようにクラスを簡素化します。辞書を使用することもできますテキストの説明 (紀元前 10 年) と整数値 (-10) 編集: 私はこれをググった:

http://code.activestate.com/lists/python-list/623672/

于 2013-04-07T08:33:05.773 に答える
2

これは古い質問ですが、同じ質問があり、次のような日付を処理するように設計されたdatautil を発表するこの記事を見つけました。

  • 紀元前/紀元前の日付を含む遠い過去および未来の日付
  • さまざまな形式の日付: 1890 年 1 月、1890 年 1 月、1890 年 12 月 1 日、1890 年春など
  • さまざまな精度の日付: 例: 1890、1890-01 (つまり、1890 年 1 月)、1890-01-02
  • 不正確な日付: c1890, 1890?, fl 1890 など

インストールはただ

pip install datautil

これまでのところほんの数分間だけ調べましたが、引数として str を受け入れず (Unicode のみ)、独自の日付クラス (Flexidate、「ISO8601 のわずかに拡張されたバージョン」) を実装していることに注意しました。役に立つかもしれません。

>>> from datautil.date import parse
>>> parse('Jan 1890')

error: 'str' object has no attribute 'read'

>>> fd = parse(u'Jan 1890')
<class 'datautil.date.FlexiDate'> 1890-01

fd.as_datetime()
>>> datetime.datetime(1890, 1, 1, 0, 0)

>>> bc = parse(u'2000BC')
<class 'datautil.date.FlexiDate'> -2000

しかし悲しいかな...

>>> bc.as_datetime()
ValueError: year is out of range

残念ながら、「 circa」 (c.、ca、ca.、circ. または cca.) で日付を処理できるものを探していました。

>>> ca = parse(u'ca 1900')
<class 'datautil.date.FlexiDate'>  [UNPARSED: ca 1900]

まあ、いつでもプルリクエストを送信できると思います;-)

于 2015-03-25T20:53:20.087 に答える