4

Zulu 時間または UTC 時間で ISO 8601 形式の一連の文字列を読み込むプロセスがあります。例えば、

2012-06-20T21:15:00Z
2012-06-20T21:16:00Z
2012-06-20T21:17:00Z
2012-06-20T21:18:00Z

文字列をタイムゾーン対応の Python 日時オブジェクトに変換し、Unix タイムスタンプに変換して整数としてバイナリ形式で保存します。例えば、

dt_str = '2012-06-20T21:15:00Z'
ts = int(mktime(datetime.strptime(dt_str, '%Y-%m-%dT%H:%M:%SZ').timetuple()))
# ts = 1340241300

これらのタイムスタンプを別のプロセスに読み戻すときに、タイムスタンプから直接 numpy.datetime64 オブジェクトをインスタンス化したいと考えています。問題は、datetime64 がタイムゾーンをローカル タイムゾーンに設定することです。

np_dt = np.datetime64(ts,'s')
# np_dt = numpy.datetime64('2012-06-20T21:15:00-0400')

タイムスタンプを読み取ってUTC時間にする方法を知っている人はいますか? np_dt を numpy.datetime64('2012-06-20T21:15:00-0000') に等しくしたいのですが...と思います。

よろしく

4

3 に答える 3

4

コードのタイムゾーンを設定するのはどうですか。

import os, time
os.environ['TZ'] = 'GMT'
time.tzset()
# then your code 
np_dt = np.datetime64(ts,'s')
于 2012-06-20T22:16:14.823 に答える
1

dateutilモジュールを使用して支援することができます。まず、保存したタイムスタンプ整数から日時オブジェクトを作成します。

>>> ts = 1340241300
>>> import datetime
>>> from dateutil import tz
>>> dt = datetime.datetime.fromtimestamp(ts).replace(tzinfo=tz.tzutc())
>>> dt
datetime.datetime(2012, 6, 20, 21, 15, tzinfo=tzutc())

次に、それをnumpyに渡します。これにより、ローカルタイムゾーンに変換されます(私は-4にいます)。

>>> import numpy as np
>>> np.datetime64(dt.isoformat())
numpy.datetime64('2012-06-20T17:15:00-0400')
于 2012-06-20T22:38:46.553 に答える
0

ドキュメントから判断すると、それを行う唯一の方法は、タイムゾーンを直接指定する文字列から作成することです。したがって、datetime.datetime最初にオブジェクトを作成し、それを'Z'追加して文字列にフォーマットし、それから を構築する必要がありますnumpy.datetime64

于 2012-06-20T22:08:18.560 に答える