エポックタイムスタンプ(たとえば、et = 1351036517.179364)をdatetime.datetimeオブジェクトに変換したいと思います。これまで、「Fri Oct 5 22:20:332012」のような文字列を取得するtime.ctime(et)を使用しました。
最終的に、2つのデータポイント間の時間差を計算するためにdatetimeオブジェクトが必要になります。もう一方のデータポイントも、datetimeオブジェクトです。
ありがとう!
タイムスタンプにはタイムゾーン情報が関連付けられていないことを覚えておく価値があります。 Unix時間は明確にUTCですが、ローカル時間をUnixスタイルのタイムスタンプで保存することも珍しくありません。確認するには、既知の参照と照合する必要があります。
タイムスタンプがすでにUTC(Unix時間)である場合は、2つのUNIXタイムスタンプを直接減算するというMarc Bの提案を使用して、それらの差の秒数を求めることができます。次に、 timedeltaを作成することをお勧めします。これにより、sを簡単に操作できるようになりますdatetime
(たとえば、日時との間でtimedeltaを合計または減算できます)。
datetime.timedelta( seconds= n_seconds )
タイムスタンプが現地時間である場合は、誤った結果が生じる可能性があるため、タイムスタンプを直接減算しないでください。
代わりに、最初にdatetime.fromtimestampを使用し、各日時にタイムゾーンを付加してから、それらを減算してタイムデルタを取得する必要があります。
atimedelta
から秒数に戻すには、python 2.7を使用していると仮定して、timedelta.total_secondsがあります。以前のバージョンを使用している場合は、手動で計算するか、またはpip install datetime
POSIXタイムスタンプをdatetime.datetime
UTCで時間を表すオブジェクトに変換するには:
from datetime import datetime, timedelta, timezone
timestamp = 1351036517.179364
utc_time = datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
# -> 2012-10-23 23:55:17.179363+00:00
Pythonバージョンがサポートしていない場合datetime.timezone
; UTCでナイーブな日時オブジェクトを取得するには、これを省略できます。
2つのデータポイント間の時間差を計算するためにdatetimeオブジェクトが必要ですが、もう1つのデータポイントもdatetimeオブジェクトです。
ナイーブdatetime
オブジェクトがUTCオフセットが異なる現地時間を表している場合、それらを直接比較することはできません。そうでない場合、間違った結果が得られる可能性があります。タイムゾーン対応の日時オブジェクトが必要であるか、最初に日時オブジェクトをUTCに変換する必要があります。見る
ドキュメントでfromtimestamp
参照されているように使用する
POSIXタイムスタンプに対応するローカル日付を返します[...そしてtzが指定されている場合...]タイムスタンプは[提供された]tzのタイムゾーンに変換されます。
これは、pythonによって生成されたタイムスタンプの例です(@jfsとPaul Ganssleのおかげで更新されました)
from datetime import datetime, timezone
epoch = datetime.now(tz=timezone.utc).timestamp() # example: 1520020585.536527
注:すべてのエポックが同じであるとは限りません。使用すると、プラットフォームに依存するエポックtime.time()
から経過した秒数が表示されます。ここで、その主張がPOSIXタイムスタンプである場合は、以下の警告を参照してください。date.timestamp()
注.timestamp()
:特に、の出力を「POSIX準拠」のタイムスタンプと呼ぶことは控えています。アプリケーションがそのレベルの精度に依存している場合は、以外のものを使用することをお勧めします.timestamp()
注:より高い精度が得られるdatetime.now
可能性があるため、使用する
注:上記の引数を省略できますがtz
、Python 3は単純な日付を処理するときに誤った仮定を行う可能性があるため、タイムゾーン対応の日付を使用することをお勧めします(または、予想される場所でエラーをスローしない)。
タイムスタンプ(例)を指定すると、次のように1520020585.536527
使用して、タイムスタンプtz対応オブジェクトに変換できます。fromtimestamp
from datetime import datetime, timezone
ts = 1520020585.536527 # remember me? I'm the epoch example output from above
utc_date = datetime.fromtimestamp(ts, tz=timezone.utc) # outputs: datetime date object
注:fromtimestamp
「POSIX」タイムスタンプtz
が必要です。ここで提供するのは、単純な日時オブジェクトを回避するためだけです。fromtimestamp
提供するタイムゾーンに必要な変換を実行しますが、UTCよりも優れているタイムゾーンはどれですか?
注:また、Pythonの文献では、入力をfromtimestamp()
「POSIX」タイムスタンプとして明示的に参照していますが、入力を「POSIX準拠」として明示的に参照しているわけではないため、「POSIX」タイムスタンプが他の部分から推測することしかできません。 、POSIX出力を「time.time()によって返される」と参照する場合のように