次の文字列があります。
mytime = "2009-03-08T00:27:31.807Z"
Pythonでエポックに変換するにはどうすればよいですか?
私は試した:
import time
p = '%Y-%m-%dT%H:%M:%S'
int(time.mktime(time.strptime(s, p)))
ただし、31.807Z
では機能しません。
2つの部分があります。
_#!/usr/bin/env python
from datetime import datetime
utc_time = datetime.strptime("2009-03-08T00:27:31.807Z", "%Y-%m-%dT%H:%M:%S.%fZ")
Epoch_time = (utc_time - datetime(1970, 1, 1)).total_seconds()
# -> 1236472051.807
_
秒の小数部を無視して整数の結果を取得することが確実である場合:
_#!/usr/bin/env python
import time
from calendar import timegm
utc_time = time.strptime("2009-03-08T00:27:31.807Z", "%Y-%m-%dT%H:%M:%S.%fZ")
Epoch_time = timegm(utc_time)
# -> 1236472051
_
_Wed July 1 2:59:60 MSK 2015
_などのうるう秒に対応するタイムスタンプをサポートするには、 time.strptime()
とdatetime
の組み合わせを使用します(うるう秒に関心がある場合は、マイクロ秒も考慮に入れてください) 。
不足しています.%fZ
からフォーマット文字列。
p = '%Y-%m-%dT%H:%M:%S.%fZ'
エポックに変換する正しい方法は、datetime
を使用することです。
from datetime import datetime
p = '%Y-%m-%dT%H:%M:%S.%fZ'
mytime = "2009-03-08T00:27:31.807Z"
Epoch = datetime(1970, 1, 1)
print((datetime.strptime(mytime, p) - Epoch).total_seconds())
または、分数を無視する場合は、intを呼び出します。
dateutilは、タイムゾーンオフセット識別子(Z
)を正しく処理できる唯一のライブラリです。
pip install python-dateutil
その後
from dateutil.parser import parse as date_parse
print date_parse("2009-03-08T00:27:31.807Z")
#get timestamp
import calendar
dt = date_parse("2009-03-08T00:27:31.807Z")
timestamp1 = calendar.timegm(dt.timetuple())
コード:
_import datetime
Epoch = datetime.datetime(1970, 1, 1)
mytime = "2009-03-08T00:27:31.807Z"
myformat = "%Y-%m-%dT%H:%M:%S.%fZ"
mydt = datetime.datetime.strptime(mytime, myformat)
val = (mydt - Epoch).total_seconds()
print(val)
> 1236472051.81
repr(val)
> '1236472051.807'
_
ノート:
time.strptime()
を使用する場合、返される _time.struct_time
_ は1秒未満の精度をサポートしていません。%f
_ format はマイクロ秒用です。解析するときは、完全な6桁である必要はありません。