6

私はPythonでiso8601タイムスタンプを表す文字列を処理する必要があります。

したがって、私のタイムスタンプ文字列は次の形式になります。

timestamp = "2011-08-18T10:29:47+03:00"

現在、私はそれらをPythonで以下を使用して変換しています。

timestamp = timestamp[:-6]
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S")

しかし、このようにして、タイムゾーンに関するすべての情報が失われます。タイムスタンプとPythonについては、ここで多くの例を見てきましたが、残念ながら、タイムゾーンを保持している人は誰もいませんでした。または、次を使用してタイムゾーンの遅延を回復するだけです。

delay = timestamp[-6:]

私も試しました:

timestamp = "2011-08-18T10:29:47+03:00"
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S%z")

しかし、それは戻った

ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S%z'

洞察をいただけますか?

4

2 に答える 2

3

python iso8601モジュールは、タイムゾーン情報を処理できる素晴らしいparse_dateメソッドで構築されています。

>>> import iso8601
>>> iso8601.parse_date("2007-01-25T12:00:00Z")
datetime.datetime(2007, 1, 25, 12, 0, tzinfo=<iso8601.iso8601.Utc ...>)

>>> iso8601.parse_date("2011-08-18T10:29:47+03:00")
datetime.datetime(2011, 8, 18, 10, 29, 47, tzinfo=<FixedOffset '+03:00'>)

別のタイムゾーンに変換する場合は、astimezone(tz)メソッドを使用します

UTC日時を取得する必要がある場合は、utctimetuple()メソッドを使用できます。

于 2012-07-30T09:47:24.727 に答える
1

タイムゾーンサポートを提供する外部モジュールを追加する必要があります。pytzモジュールは、必要なタイムゾーンデータベースを提供します。

タイムゾーンを手動で解析してpytzタイムゾーンを作成するか、またはのようなパッケージを使用zc.iso8601iso8601て解析を行う必要があります。

from zc.iso8601.parse import datetimetz
datetimetz(timestamp)
于 2012-07-30T09:46:25.817 に答える