gmtime()の時刻+日付出力からエポックからの秒数を取得する方法は?


162

gmtime()時間+日付を入れて秒数を取得する逆の方法は?

のような文字列'Jul 9, 2009 @ 20:02:58 UTC'があり、エポックから2009年7月9日までの秒数を取得したいと思います。

私は試しましたtime.strftimeが、それを適切に使用する方法、またはそれが使用する正しいコマンドであるかどうかわかりません。

回答:


123

これがUnixタイムスタンプを取得する方法であると検索エンジンから通知されたためにここに来た場合は、この回答の読み上げを中止してください。下にスクロールします。

あなたが逆転したい場合はtime.gmtime()、あなたがしたいですcalendar.timegm()

>>> calendar.timegm(time.gmtime())
1293581619.0

を使用して文字列を時間タプルに変換できますtime.strptime()。これにより、渡せる時間タプルが返されますcalendar.timegm()

>>> import calendar
>>> import time
>>> calendar.timegm(time.strptime('Jul 9, 2009 @ 20:02:58 UTC', '%b %d, %Y @ %H:%M:%S UTC'))
1247169778

カレンダーモジュールの詳細はこちら


16
現在のUNIXエポック時間を探している場合は、@ DanJのコメントまたはnarenの回答を参照してください。この回答は正しくありません。
kosii 2013年

639

時間モジュールを使用します。

epoch_time = int(time.time())

14
@DanJ:エポック(一定の瞬間)からの経過秒数であり、どのタイムゾーンでも同じです。うるう秒前後の時間インスタンスを無視すると、timeUnixエポック(1970)を使用すると、UTCに簡単に変換できます。
jfs 2013年

42
これはOPが求めていたものではありませんが、私が欲しかったものです。だから+1。
fearless_fool

6
それはタイトルで尋ねられていることに対する答えです:「エポックからの時間を得る」。+1
AlejandroVD

@JFSebastianこれはエポックを数秒に与えます。上記の同じ答えを使用して、ミリ秒までの解像度を取得するにはどうすればよいですか?
Marlon Abeykoon

2
上記の私のコメントを拡張するにtime.time()値はローカルタイムゾーンに依存しません(「正しい」タイムゾーンなどを除外した場合)。たとえば、POSIX時間を返す場合(ほとんどのシステムでそうです)、SI秒数です。うるう秒をカウントしないエポック(1970-01-01UTC)。この値 UTC(うるう秒を除く)に変換できますが、UTC ではありません。@MarlonAbeykoon:私はこの答えが
jfs '22

10

time.gmtimeはタイムスタンプ0をにマップすることに注意してください1970-1-1 00:00:00

In [61]: import time       
In [63]: time.gmtime(0)
Out[63]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

time.mktime(time.gmtime(0)) ロケールに応じた量だけシフトされたタイムスタンプを提供します。これは通常、0ではない場合があります。

In [64]: time.mktime(time.gmtime(0))
Out[64]: 18000.0

の逆time.gmtimecalendar.timegm

In [62]: import calendar    
In [65]: calendar.timegm(time.gmtime(0))
Out[65]: 0

これにより、
time.mktime

@Jkm:で使用mktime()しないでくださいgmtime()ローカル時間をmktime()受け入れますが、UTC時間を返します-ローカルタイムゾーンは異なる場合があり、異なる可能性があります。「あなたのロケールに相対的なタイムスタンプ」は意味がありません:POSIXタイムスタンプはあなたのロケール(ローカルタイムゾーン)に依存しません-それは世界中で同じ値です。「エポックからの秒数」は、ほとんどの場合(Windowsでも)POSIXタイムスタンプです。TAIタイムスケールを使用する「正しい」タイムゾーンなどは一般的ではありません。Pythonのtime.time()はローカルまたはUTCタイムスタンプを返しますか?を参照してくださいgmtime()
jfs

@JF Sebastianそうですね。実際、mktime()最近私はいくつかの問題を抱えています。一部のpython Webサーバー(たとえば、トルネード)では、プロセスが実行され続けるため、システムロケールを変更してもmktime()、WebサーバーAPIによって呼び出されたまま、古いタイムゾーンを使用して時間オブジェクトを生成します。切り替えてgmtime()手動でgmtオフセットを適用する必要があります。
Jkm 2016

5
ep = datetime.datetime(1970,1,1,0,0,0)
x = (datetime.datetime.utcnow()- ep).total_seconds()

これはとは異なるはずですがint(time.time())、次のようなものを使用しても安全ですx % (60*60*24)

datetime —基本的な日付と時刻のタイプ:

timeモジュールとは異なり、datetimeモジュールはうるう秒をサポートしていません。


3
t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")

何らかの理由でstrptimeにアクセスできません。日時をインポートしました
calccrypto 2010

1
@calccryptoどちらfrom datetime import datetimeかを実行する必要がありますdatetime.datetime.strptime
pathikrit

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