84

iso format に一致する時間文字列を生成する必要がありますyyyy-mm-ddThh:mm:ss.ssssss-ZO:NEnow()クラスメソッドとクラスメソッドはutcnow()、ほとんど私が望むことを行います。

>>> import datetime
>>> #time adjusted for current timezone
>>> datetime.datetime.now().isoformat()
'2010-08-03T03:00:00.000000'
>>> #unadjusted UTC time
>>> datetime.datetime.utcnow().isoformat()
'2010-08-03T10:00:00.000000'
>>>
>>> #How can I do this?
>>> datetime.datetime.magic()
'2010-08-03T10:00:00.000000-07:00'
4

6 に答える 6

134

Python 3.2+ で UTC の現在時刻を取得するには:

>>> from datetime import datetime, timezone
>>> datetime.now(timezone.utc).isoformat()
'2015-01-27T05:57:31.399861+00:00'

Python 3.3+ で現地時間を取得するには:

>>> from datetime import datetime, timezone
>>> datetime.now(timezone.utc).astimezone().isoformat()
'2015-01-27T06:59:17.125448+01:00'

説明: UTC 時間でdatetime.now(timezone.utc)タイムゾーン対応オブジェクトを生成します。次に、引数なしで呼び出された場合、オブジェクトのタイムゾーンをシステムのロケールのタイムゾーンに変更します。タイムゾーン対応オブジェクトは、正しい ISO 形式を自動的に生成します。datetimeastimezone()datetimedatetime

于 2015-01-27T05:58:31.230 に答える
41

datetime オブジェクトをタイムゾーン対応にする必要があります。日時ドキュメントから:

日時オブジェクトには、「naive」と「aware」の 2 種類があります。この区別は、オブジェクトが時間帯、夏時間、またはその他の種類のアルゴリズム的または政治的な時間調整の概念を持っているかどうかを示します。単純な datetime オブジェクトが協定世界時 (UTC)、現地時間、または他のタイムゾーンの時間を表すかどうかは、純粋にプログラム次第です。特定の数値がメートル、マイル、または質量を表すかどうかはプログラム次第です。ナイーブな日時オブジェクトは、現実のいくつかの側面を無視するという犠牲を払って、理解しやすく、操作しやすいです。

対応する日時オブジェクトがある場合は、isoformat() を使用して必要な出力を取得できます。

datetime オブジェクトを認識させるには、ここの 2 番目の例のように tzinfo をサブクラス化するか、より簡単にpytzpython-dateutilなどのパッケージを使用してサブクラス化する必要があります。

pytz を使用すると、次のようになります。

import datetime, pytz
datetime.datetime.now(pytz.timezone('US/Central')).isoformat()

strftime を'%z' format ディレクティブとともに使用すると、出力形式を制御することもできます。

datetime.datetime.now(pytz.timezone('US/Central')).strftime('%Y-%m-%dT%H:%M:%S.%f%z')
于 2010-08-04T00:05:32.713 に答える
17

矢印付き

>>> import arrow
>>> arrow.now().isoformat()
'2015-04-17T06:36:49.463207-05:00'
>>> arrow.utcnow().isoformat()
'2015-04-17T11:37:17.042330+00:00'
于 2015-04-17T11:45:07.017 に答える
5

Python 2.7+ で実行できますpython-dateutil(デフォルトで Mac にインストールされています):

>>> from datetime import datetime
>>> from dateutil.tz import tzlocal
>>> datetime.now(tzlocal()).isoformat()
'2016-10-22T12:45:45.353489-03:00'

または、既存の保存された文字列から変換する場合は、次のようにします。

>>> from datetime import datetime
>>> from dateutil.tz import tzlocal
>>> from dateutil.parser import parse
>>> parse("2016-10-21T16:33:27.696173").replace(tzinfo=tzlocal()).isoformat()
'2016-10-21T16:33:27.696173-03:00' <-- Atlantic Daylight Time (ADT) 
>>> parse("2016-01-21T16:33:27.696173").replace(tzinfo=tzlocal()).isoformat()
'2016-01-21T16:33:27.696173-04:00' <-- Atlantic Standard Time (AST)
于 2016-10-22T15:52:36.913 に答える
-15

次の例のようなもの。私はオーストラリア東部にいることに注意してください(現時点ではUTC + 10時間)。

>>> import datetime
>>> dtnow = datetime.datetime.now();dtutcnow = datetime.datetime.utcnow()
>>> dtnow
datetime.datetime(2010, 8, 4, 9, 33, 9, 890000)
>>> dtutcnow
datetime.datetime(2010, 8, 3, 23, 33, 9, 890000)
>>> delta = dtnow - dtutcnow
>>> delta
datetime.timedelta(0, 36000)
>>> hh,mm = divmod((delta.days * 24*60*60 + delta.seconds + 30) // 60, 60)
>>> hh,mm
(10, 0)
>>> "%s%+02d:%02d" % (dtnow.isoformat(), hh, mm)
'2010-08-04T09:33:09.890000+10:00'
>>>
于 2010-08-03T23:44:04.840 に答える