Blow Up by Black Swan

PythonーUNIXタイムスタンプから時刻(datetimeオブジェクト)へと変換する方法

今回は、UNIXタイムスタンプから時刻オブジェクトに変換する方法について学習しました。ググったりしていると、あまりしっかりとした情報がなかったとので、記事でまとめることにしました。時刻オブジェクトのawareやnaive、タイムスタンプなどについては、今までの時刻関係の記事でも説明していますので、そちらも参考になれば幸いです。

1. 構築環境と流れなど

今回の構築環境は以下になります。

PC: Macbook
python: 3.7.0
使用モジュール・パッケージ: datetime, pytz
※ pytzはサードパーティモジュールになるため、pipでのインストールが必要です。 

構築の流れは以下になります。

  1. タイムゾーンを明示的に指定(指定しないとローカルタイムになる)
  2. タイムスタンプとタイムゾーン情報からdatetimeオブジェクト(時刻)を生成

2. コード例

以下がコード例になります。タイムゾーンの違いを表すために2パターン作っています。

import datetime, pytz

timestamp = 1544604618.630  # 実験用タイムスタンプ

local_tz = pytz.timezone('Asia/Tokyo')    # 1.タイムゾーンの明示(ローカルタイム)
utc = pytz.utc                            # 1.タイムゾーンの明示(UTC)

print(datetime.datetime.fromtimestamp(timestamp, local_tz))  # 2.datetimeオブジェクトの生成(ローカルタイム) 
print(datetime.datetime.fromtimestamp(timestamp, utc))       # 2.datetimeオブジェクトの生成(UTC)

#UTCの時刻表記の場合の別解
print(datetime.datetime.utcfromtimestamp(timestamp))  #但し,naiveな時刻オブジェクト

戻り値

2018-12-12 17:50:18.630000+09:00
2018-12-12 08:50:18.630000+00:00
2018-12-12 08:50:18.630000

タイムスタンプからdatetimeオブジェクトに変換するfromtimestampメソッドは、変換対象のタイムスタンプの他に、tzinfoオブジェクトを引数に設定することができます。設定しない場合は、ブラウザやPCなどの時刻情報に合わせて変換されるようですが、今回はタイムゾーンの違いを表すためにあえてタイムゾーンを明示的に指定しました。ちなみに、もちろんですがutcfromtimestampではタイムゾーンの設定はできないようになっています。pytzはタイムゾーンの取り扱いに便利なサードパーティモジュールです。

3. まとめ

今回は、短いですがタイムスタンプから時刻オブジェクトに生成する方法についてまとめてみました。どなたかの参考になりましたら、幸いです。

読んで頂き、ありがとうございました。

4. 参考サイト

今回参考にしたサイトは下記になります。