2013-05-26 19 views
57

時間を扱うために、Pythonは異なるパッケージ(datetime、、calendar)を提供しています(here)。私は大きな間違いをして現在のGMT時間を取得しましたtime.mktime(datetime.datetime.utcnow().timetuple())現在のGMT時間をUnixタイムスタンプ形式で取得する最も簡単な方法は何ですか?

Unixタイムスタンプで現在のGMT時間を取得する簡単な方法はありますか?

+1

をしたい解像度に応じて掛けることができますを使用して、入力/出力は何ですか? 'datetime.utcnow()'は現在のUTC時刻をdatetimeオブジェクトとして返します(「GMT時刻」について話しているときはUTCが必要です)。 'time.time()'はUnixのタイムスタンプを直接浮動小数点数として返します。ここでは、[時刻を表すdatetime.date/datetime.datetimeをUTCからPOSIXタイムスタンプに変換する方法](http://stackoverflow.com/a/8778548/4279)です。 – jfs

+0

提案した方法が間違っているか、あまりにも冗長すぎますか?関連:http://stackoverflow.com/questions/15940280/how-to-get-utc-time-in-python –

+0

あなたの方法は間違っていたのですか? – skeller88

答えて

31

これは役に立ちますか?

from datetime import datetime 
import calendar 

d = datetime.utcnow() 
unixtime = calendar.timegm(d.utctimetuple()) 
print unixtime 

How to convert Python UTC datetime object to UNIX timestamp

+2

'datetime.utcnow()。utctimetuple()'の代わりに、 '' time.gmtime() '](http://docs.python.org/2/library/time.html#time.gmtime )。 – Cairnarvon

+1

リンクが死んでいる! –

+1

@ GauravDaveありがとう、私はアーカイブされたバージョンでリンクを更新しました。 –

97

私はエポックからの秒数でのタイムスタンプを取得するためにtime.time()を使用します。

import time 

time.time() 

出力:ほとんどのプラットフォーム上での標準的なCPythonの実装のために

1369550494.884832 

これはUTC値を返します。

+12

あなたのマシンのローカル時計はUTCでない可能性があります。 – 9000

+0

@ 9000:正直なところ、私は常に時間が重要なあらゆる環境でUTCを主張していました。そして、彼は最も簡単な解決策を求めました。 Linux、BSD、Mac OS X、およびWindowsを含む最新のプラットフォーム上のCPythonでは、すべてtime.time()のUTCが返されることに注意してください。これは、これらのOSでのC標準ライブラリの時間関数の動作を反映しています。 –

+19

@ 9000:ローカルのタイムゾーンは関係ありません。 Unix時間はUTC時間に相当します(うるう秒を無視した場合)。それについて考えてみましょう。タイムスタンプは、エポックからの経過秒数です(一定の瞬間)。なぜ、タイムゾーンマシンのローカルクロックが使用するものに依存するのでしょうか?どの瞬間でも、Unixの時間は世界中で同じです。いくつかの(未知の)プラットフォームでは異なるエポックを使用するかもしれませんが、その値はローカルタイムゾーンに依存しません。 – jfs

0

私はこの方法を好む:

import datetime, time 

dts = datetime.datetime.utcnow() 
epochtime = round(time.mktime(dts.timetuple()) + dts.microsecond/1e6) 

ここに掲載その他の方法は、いずれかのすべてのプラットフォーム上であなたにUTCを与えるか、または全体のみ秒を報告することが保証されていません。あなたが完全な解像度を望むなら、これはマイクロ秒にも作用します。

3

それとも、単に日時標準モジュール

In [2]: from datetime import timezone, datetime 
    ...: int(datetime.now(tz=timezone.utc).timestamp() * 1000) 
    ...: 
Out[2]: 1514901741720 

あなたは切り捨てるか、

+0

あなたは非常に具体的には時間を整数に強制しているので、私はなぜ混乱しているのですか?出力テキストは10進数ですか? – Weston

+0

あなたは私の悪い、私は後でintキャストを追加 – Maresh

関連する問題