58

エポック以降のタイムスタンプは次のとおりです。

Timestamp
1346114717972
1354087827000

これらのタイムスタンプを特定の出力形式に変換するにはどうすればよいmm/dd/yyyy hr:min:secですか?

それらをに変換しようとしましたdatetime.datetimeが、失敗しました:

 >>> datetime.datetime.fromtimestamp(1346114717972)
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 ValueError: timestamp out of range for platform time_t

これどうやってするの?

4

3 に答える 3

74

timeモジュールを使用します

>>> import time
>>> time.gmtime(1346114717972/1000.)
time.struct_time(tm_year=2012, tm_mon=8, tm_mday=28, tm_hour=0, tm_min=45, tm_sec=17, tm_wday=1, tm_yday=241, tm_isdst=0)  

これは、タイムスタンプを UTC/GMT 時間で表示します。

タイムスタンプは、提供したスタンプが秒単位ではなく、エポックからのミリ秒単位であるため、1000 で除算されます。

次に、次のようstrftimeにフォーマットします。

>>> time.strftime('%m/%d/%Y %H:%M:%S',  time.gmtime(1346114717972/1000.))
'08/28/2012 00:45:17'
于 2012-09-17T11:58:25.320 に答える
60

ミリ秒の分解能を仮定すると:

import datetime

s = '1346114717972'
fmt = "%Y-%m-%d %H:%M:%S"

# local time
t = datetime.datetime.fromtimestamp(float(s)/1000.)
print t.strftime(fmt) # prints 2012-08-28 02:45:17

# utc time
t_utc = datetime.datetime.utcfromtimestamp(float(s)/1000.)
print t_utc.strftime(fmt) # prints 2012-08-28 00:45:17

strftime()およびstrptime()動作のドキュメントを参照してください。

于 2012-09-17T12:03:12.133 に答える