ExcelでUnixtime(ユニックスタイム)を日付に変換する方法について紹介します。ウェブ検索で見つけた数式を何も考えずにそのまま使ったらうまくいかなかったので、方法だけでなく仕組みや注意点についても備忘録的に書き残しておこうと思います。
Unixtimeとは
この記事を読んでいる方は、Unixtimeとは何かご存知の上でここにたどり着いたのだと思いますが、結構重要なポイントがあるので見てみましょう。
Unixtimeとは、一言でいうとこういうやつです。
1598253617
そう、Unixtimeとは1970-01-01 00:00:00 (GMT)から何秒経過したかを示しています。よって、その秒数から日付を算出する計算式を組めば我々人間が直感的に理解できる日付の表示に変換できます。
そして、重要なポイントが2つあります。
- UnixtimeはGMTなので、日本時間が知りたい場合は時差を考慮する必要がある
- Unixtimeは上の例のように10ケタとは限らずデータ型によっては13ケタや16ケタだったりする(ケタ数が増えるほど精度が良く、13ケタはミリ秒単位、16ケタはマイクロ秒単位となります)。
ちなみに、ネットで私が見つけた記事の多くはUnixtimeが10桁を前提としているようで、私の場合はお恥ずかしい話、桁数の違いのせいで計算がくるってしまいよくわからない値が出てちょっとばかりはまってしまいました。。。ので、これを書いてます!
Excelで変換してみる
では、Excelを使って変換する手順についてみていきたいと思います。
Excelでは、日付は1900年1月1日を1とするシリアル値によって管理されてます(1日ずつ連番で、1900年1月2日は2になります)。
また、前述の通りUnixtimeは1970-01-01 00:00:00 (GMT)から何秒経過したかを示してます。
以上より、Unixtimeを1日あたりの秒数(24*60*60)で割ることで1970年1月1日から経過した時間を秒単位ではなく日単位で取得し、1970年1月1日のシリアル値(25569)に足すことでExcel上で日付として使用できる値を取得できます。
これを数式にしたのがこちらになります
= A1/(24*60*60) + DATE(1970,1,1)
- A1のセルにunixtimeが入力されている想定
- DATE(1970,1,1)はシリアル値「25569」を返す
上記は、Unixtimeが10桁であることを想定した式になります。Unixtimeが13桁の場合はミリ秒単位の数値になるため、Unixtimeを1日あたりのミリ秒数(1000*24*60*60)で割ることで、ミリ秒単位を日単位に変換し、1970年1月1日にその日数を足すことで変換できます。16桁の場合も同じ原理で計算できます。
13桁の場合
= A1/(1000*24*60*60) + DATE(1970,1,1)
16桁の場合
= A1/(1000*1000*24*60*60) + DATE(1970,1,1)
ちなみに、上記で出した日付はいずれもGMTなので、日本時間を取得するには時差(GMT+9)を考慮する必要があります。
日本時間(GMT+9:00)に変換
= A1/(24*60*60) + DATE(1970,1,1) + TIME(9,0,0)
セルの表示形式を変更する
上の手順の数式を入力後、B1のセルには変換後のシリアル値が返されます。セルの表示形式をデフォルトのままにしていると、以下のように日付ではなくシリアル値で表示されてしまいます。
その場合は、セルを選択し、右クリック > [セルの書式設定] を選択し、以下のダイアログでセルの書式を日付へと変更することで表示を切り替えられます。
私は上のスクショのように、[ユーザー定義]で以下を指定して、秒数まで表示する書式をよく使います。
yyyy/mm/dd h:mm:ss