Pythonのtimeモジュールのtime.time()
はシステムの時刻またはUTCの時刻を返しますか?
time.time()
関数は、エポック以降の秒数を秒数で返します。 "Epoch"はUTCで1970年1月1日の始まりとして定義されていることに注意してください。そのため、エポックはUTCの観点から定義され、世界的な時期を確立します。あなたが "Epochを過ぎた秒数"(time.time())のどこにいようとも、同じ瞬間に同じ値を返します。
これが私が私のコンピュータで走ったいくつかのサンプル出力です、そしてそれを同様に文字列に変換します。
Python 2.7.3 (default, Apr 24 2012, 00:00:54)
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>
ts
変数は秒単位で返される時間です。私はそれをdatetime
ライブラリを使って文字列に変換し、人間が読める形式の文字列にしました。
これは、テキストファイルで使用できるテキスト形式のタイムスタンプ用です。 (質問の題名はこれまでとは異なっていたので、この答えの序文を変更して時間としてどのように解釈できるかを明確にしました。
datetime.datetime
の.now()
または.utcnow()
を使用して、タイムスタンプを文字列として取得できます。
>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000
now
は期待どおりにutcnow
と異なります - それ以外は同じように機能します。
>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000
タイムスタンプを文字列に明示的にレンダリングすることができます。
>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'
あるいは、タイムスタンプを好きなようにフォーマットすることをもっと明確にすることができます。
>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'
ISOフォーマットが必要な場合は、オブジェクトの.isoformat()
メソッドを使用してください。
>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'
変換や変換をせずに、計算や印刷用の変数にこれらを使用できます。
>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print ts
2015-04-21 12:02:19.209915
>>> print tf
2015-04-21 12:02:30.449895
>>> print te
0:00:11.239980
#squiguyからの答えに基づいて、本当のタイムスタンプを取得するには、floatからキャストします。
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
少なくともそれがコンセプトです。
答えはどちらでもないし両方でもよい。
どちらも:time.time()
は、エポックから経過したおよそ秒数を返します。結果はタイムゾーンに依存しないため、UTCでも現地時間でもありません。これが 「エポックからの秒数」に対するPOSIXの定義です 。
両方:time.time()
はシステムの時計を同期させる必要がないのでその値を反映します(ただしローカルタイムゾーンとは関係ありません)。コンピュータが異なれば、同時に異なる結果が出る可能性があります。一方、コンピュータの時刻が同期されている場合は、タイムスタンプからUTC時刻を取得するのは簡単です(うるう秒を無視した場合)。
from datetime import datetime
utc_dt = datetime.utcfromtimestamp(timestamp)
さまざまなPythonバージョンでUTC時刻からタイムスタンプを取得する方法については、 UTCに従ってエポック以降の日付を秒に変換する方法を参照してください。
私は結局決着しました:
>>> import time
>>> time.mktime(time.gmtime())
1509467455.0
特定のタイムゾーンには「エポック」のようなものはありません。エポックは特定の瞬間の時間として明確に定義されているので、タイムゾーンを変更すると、時間自体も変更されます。具体的には、今回はJan 1 1970 00:00:00 UTC
です。そのため、time.time()
はエポックからの経過秒数を返します。
タイムスタンプは常にutcの時刻ですが、datetime.datetime.fromtimestamp
を呼び出すと、このタイムスタンプに対応するローカルタイムゾーンの時刻が返されるため、結果はロケールに依存します。
>>> import time, datetime, arrow
>>> time.time()
1564494136.0434234
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)
異なる動作を持つ素敵なライブラリarrow
が存在します。同じ場合、UTCタイムゾーンで時間オブジェクトを返します。
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>