35

私が使用した: utctime = datetime.datetime(1601,1,1) + datetime.timedelta(microseconds = tup[5]) last_visit_time = "Last visit time:"+ utctime.strftime('%Y-%m-%d %H:%M:%S')

しかし、私は1601の時間を持っているので、エラーは次のように表示されます。 ValueError: year=1601 is before 1900; the datetime strftime() methods require year >= 1900

python2.7を使用しましたが、どうすれば作成できますか?どうもありがとう!

4

4 に答える 4

21

次のことができます。

>>> utctime.isoformat()
'1601-01-01T00:00:00.000050'

上記とまったく同じ形式にしたい場合は、次のようにします。

iso = utctime.isoformat()
tokens = iso.strip().split("T")
last_visit_time = "Last visit time: %s %s" % (tokens[0], tokens[1].strip().split(".")[0])

ここでstrftimeこの動作を修正するためのパッチがあるようです(テストされていません)

于 2012-04-21T23:53:14.287 に答える
14

このisoformatメソッドは、その表現でdatetimeobjのtime部分からdate部分を分割する文字を指定するパラメーターを受け入れます。したがって:

>>> utctime.isoformat(" ")
'1601-01-01 00:00:00.000050'

それをする必要があります。さらに、マイクロ秒を削除したい場合は、分割を操作できます。

>>> utctime.isoformat(" ").split(".")[0]
'1601-01-01 00:00:00'
于 2012-12-01T17:18:26.107 に答える
11

strftime1900年以前の日付を処理するように変更するには、さまざまな方法があります。

  • ASPNstrftimeには、日付オブジェクトを使用して呼び出すことができる別のメソッドを提供するレシピがあります。aspn_recipe.strftime(dt, fmt)モジュールで自分で設定した場合
  • @ stephen-rumbalskiが言ったように、外部mxDateTimeパッケージはこれをサポートしています。しかし、それはまったく異なる日付オブジェクトシステムを使用しています
  • バージョンの時点で1.5virtualtimeパッケージは両方にパッチtime.strftimeを適用datetime.datetime.strftimeし、Python 3.3+のように動作します。他の仮想時間機能を有効にしなくても、これを利用できます。(免責事項:私はこのパッケージに取り組んでいます

Pythonは、1900年より前にエラーが発生し、Python2.7には1000年より前にエラーが発生することに注意してください。さらに、プレバージョンは、との間の年をとの間として解釈します。以降のPythonバージョンは、のすべての正の年(およびの負の年)をサポートし、との間の年のマッピングを行いません。3.03.13.23.2099196920683.3datetimetime.strftimetime.strftime099

元のPythonのバグは、これがPython 2.7の機能であると判断し(おそらくこれらの日付のシステムサポートの欠如を回避したためstrftime)、機能を再実装することでPython3シリーズで徐々に取り組んだことを説明しています。

于 2015-08-25T14:24:21.190 に答える
8

矢印(datetimeとdateutilの抽象化パッケージ)を使用することをお勧めします。Python2.6/ 7.xや1900より前の日付でも、あらゆる種類の日時オブジェクトを処理するのは非常に簡単です。

例えば:

>>> import arrow

>>> in_date_str = "1853-10-30T13:36:41.942623+00:00"
>>> in_date_obj = arrow.get(crea)
>>> print(in_date_obj)
arrow[1853-10-30T13:36:41.942623+00:00]>

# basic formatting
>>> in_date_obj.format()
u'1853-10-30 13:36:41-00:00'

# advanced formatting
>>> in_date_obj.format("dddd D MMMM YYYY", "fr_FR")
u'Dimanche 30 Octobre 1853'

# humanized delta
>>> in_date_obj.humanize()
u'162 years ago'
# easy localization handling
>>> in_date_obj.humanize(locale="fr_FR")
u'il y a 162 ans'
于 2016-02-24T16:43:05.770 に答える