web-dev-qa-db-ja.com

Pythonのtime.time()はUTCでタイムスタンプを返しますか?

UNIXタイムスタンプをUTC時間で生成する必要があるので、time.time()を使用して生成します。
他に何かする必要がありますか、それともタイムスタンプはUTCで自動的に行われますか?

17
incognito2

技術的には time.time() は指定されていません。実際には、少なくともCPythonでは、基になる標準Cライブラリのtimeで使用されている形式でタイムスタンプを返します。関数。

C規格(これは自由に入手できません)は、これがGMTであるかどうかを示していません。また、 POSIX標準 も示していません。それはただ言う:

time()関数は、エポック以降の秒単位の時間の値を返します。

…タイムゾーンについては何も言わずに、それをlocaltimeまたはgmtimeに渡して、ローカルまたはGMTタイムゾーンで「故障時間」を取得できることを除いて。

したがって、これはプラットフォーム固有です。プラットフォームは、timelocaltimeが適切に機能する方法で返す限り、gmtimeに必要なものを返すことができます。

そうは言っても、それは通常がGMTになるか、むしろ、UTC(Windows)またはUTC-except-for-leap-seconds(他のほとんどのプラットフォーム)。たとえば、 FreeBSD は次のように述べています。

time()関数は、うるう秒を含めずに、1970年1月1日の0時間0分0秒からの時間を秒単位で返します。

OS Xと他のほとんどの* BSDは同じマンページを持っています Windows および linux/glibc も明確にUTC(うるう秒の有無にかかわらず)などを返します。

また、Pythonドキュメンテーションは言う:

エポックとは何かを知るには、gmtime(0)をご覧ください。

これをtimeおよびgmtimeの定義と合わせると、プラットフォームがローカルタイムスタンプを返すのはGMTよりもはるかに多くの作業になります。 (とは言っても、うるう秒のおかげで、POSIXプラットフォームには実際には当てはまらないため、このステートメントはそれほど信頼できるものにはなりません。)

21
abarnert

time.time()は秒を返します エポック以降 、つまり、使用されている標準時間またはゾーンを定義していません。

以下を使用して時間基準に変換します。

どちらも time.struct_time

>>> t = time.time()
>>> time.localtime(t)
time.struct_time(tm_year=2013, tm_mon=5, tm_mday=15, tm_hour=2, tm_min=41, tm_sec=49, tm_wday=2, tm_yday=135, tm_isdst=1)
>>> time.gmtime(t)
time.struct_time(tm_year=2013, tm_mon=5, tm_mday=15, tm_hour=0, tm_min=41, tm_sec=49, tm_wday=2, tm_yday=135, tm_isdst=0)
9
timss