Unixタイムスタンプ形式で現在のGMT時刻を取得する最も簡単な方法は何ですか?


175

Pythonは(異なるパッケージを提供してdatetimetimecalendar見られるように)ここに、時間を処理するために、でしています。現在のGMT時刻を取得するために以下を使用して大きな間違いを犯しましたtime.mktime(datetime.datetime.utcnow().timetuple())

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


1
入力/出力とは何ですか?datetime.utcnow()現在のUTC時間をdatetimeオブジェクトとして返します( "GMT時間"について話しているときはUTCが必要だと思います)。time.time()Unixタイムスタンプを浮動小数点数として直接返します。ここだPOSIXタイムスタンプにUTCにdatetime.date/datetime.datetime表す時間を変換する方法
jfs 2013年

提案された方法は間違っていますか、それとも冗長すぎますか?関連:stackoverflow.com/questions/15940280/...
チロSantilli郝海东冠状病六四事件法轮功

なぜあなたの方法は間違いでしたか?
skeller88

回答:


230

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

import time

time.time()

出力:

1369550494.884832

ほとんどのプラットフォームでの標準のCPython実装の場合、これはUTC値を返します。


21
問題は、マシンのローカルクロックがUTCでない可能性があることです。
9000

@ 9000:正解ですが、時間管理が重要な環境では常にUTCを主張します。そして、彼は最も簡単な解決策を求めました。Linux、BSD、Mac OS X、Windowsなどの最新プラットフォームのCPythonでは、time.time()に対してすべてUTCが返されることに注意してください。これは、これらのOSでのC標準ライブラリの時間関数の動作を反映しています。
エドモンドバーネット

66
@ 9000:ローカルのタイムゾーンは関係ありません。Unix時間はUTC時間に対応します(うるう秒前後の時間を無視した場合)。考えてみてください。タイムスタンプは、エポック(一定の瞬間)から経過した秒数です。なぜ、タイムゾーンマシンのローカルクロックが何を使用しているかに依存するのはなぜですか。Unixの時間はいつでも世界中で同じです。一部の(不明な)プラットフォームは別のエポックを使用する可能性がありますが、その値はローカルタイムゾーンに依存しません。
jfs 2013年



42

これは役に立ちますか?

from datetime import datetime
import calendar

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

Python UTC日時オブジェクトをUNIXタイムスタンプに変換する方法


@Cairnarvonそれはほんの一例でした。現在のタイムスタンプtime.time()が必要な場合は、単純に呼び出すことができ、日時変換はまったく必要ありません。
メッサ

1
FWIW:これはUTC時間ではなく、現地時間に変換されたUTCです。UTCでタイムスタンプを取得するには、他の方法を実行する必要があります。
Sherlock70

18

または単に日時標準モジュールを使用する

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

必要な解像度に応じて、切り捨てたり、乗算したりできます。この例はミリ秒を出力しています。

適切なUnixタイムスタンプ(秒単位)が必要な場合は、* 1000


あなたは非常に具体的にコードを整数に時間を強制しているので、出力テキストが10進数である理由が混乱していますか?
ウェストン2017

あなたがたは悪い、後でintキャストを追加した
Maresh

これは、Javascript momentライブラリのとまったく同じですmoment().utc().valueOf()。まさに私が探していたもの。ありがとう
azhar22k

UNIXタイムスタンプは1970年からの秒数であると想定されています。ソリューションではこれを生成しません。
skyking

1
「必要な解像度に応じて、切り捨てたり、乗算したりできます。」* 1000の部分をドロップすると、数秒になります。
Maresh

18

python2およびpython3

時間モジュールを使用するのは良いことです

import time
int(time.time())

1573708436

datetimeモジュールを使用することもできますが、strftime( '%s')を使用すると、strftimeは時間をローカル時間に変換します!

python2

from datetime import datetime
datetime.utcnow().strftime('%s')

python3

from datetime import datetime
datetime.utcnow().timestamp()

2
UTC + 1であること、time.time()およびdatetime.utcnow().timestamp()ないではない同じ値を与えます!
user136036

また、2番目のオプションが正しいことを期待していましたが、datetime.now()。timestamp()を使用してUTC + 1100で正しい値を取得する必要がありました。私はtimestamp()がどちらでも正しく機能することを期待しましたが、そうではありません
David Waterworth

よく見ると、datetime.utcnow()とdatetime.now()はどちらもナイーブな日時(tzinfoなし)を返し、timestamp()はtzinfo = nullの場合はローカルと見なされます。
デビッドウォーターワース

2

私はこの方法が好きです:

import datetime, time

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

ここに掲載されている他の方法は、すべてのプラットフォームでUTCを提供することが保証されていないか、秒単位で報告されるだけです。フル解像度が必要な場合は、これでマイクロ秒まで機能します。


1
残念ながら、あなたがたまたまUTC + 0000タイムゾーンにいるのでない限り、これはUTCを与えていないようです。utctimetuple代わりに使用してもトリックは行われます。
skyking

1
from datetime import datetime as dt
dt.utcnow().strftime("%s")

出力:

1544524990

これはtime.time()私と同じ結果にはなりません。
アルウィニウス

1
これはおそらく、タイムゾーン情報なしでをdt.utcnow返すためdatetimeです。次にstrftimedatetimeが現地時間であると想定します。
skyking

1
@skykingこれは、このページのほとんどすべての回答の問題です。
David Waterworth

1
#First Example:
from datetime import datetime, timezone    
timstamp1 =int(datetime.now(tz=timezone.utc).timestamp() * 1000)
print(timstamp1)

出力:1572878043380

#second example:
import time
timstamp2 =int(time.time())
print(timstamp2)

出力:1572878043

  • ここでは、最初の例が2番目の例よりも正確な時間を与えることがわかります。
  • ここでは最初のものを使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.