この記事をシェアする

【Excel芸】UNIXタイムスタンプ(UTC+9)をEXCELの日付(シリアル値)に変換するにはタイムスタンプに時差相当の秒数(32400)を足して24時間分の秒数(86400)で割り、UNIXエポック(1970-01-01 00:00:00)のシリアル値を足す

先日Excelの日付(シリアル値)をUNIXタイムスタンプに変換するって記事投稿したけど、どちらかっていうとこっちの方が需要ありそうだなーと思ったので記事をしたためた。

例えば、データベースからエクスポートしたCSVをExcelに取り込み、タイムスタンプが入った列を日付に変換したい…みたいなケースって結構あるんじゃないかと思う。
(…と、ここまで書いて気づいてしまったが、それだったらまずデータベース上でselectする際に対象の列をfrom_unixtimeなりした方が早い気が…)

先日の記事

UNIXタイムスタンプは1970-01-01 00:00:00を0とした経過秒数。
一方Excelのシリアル値は1900-01-01を1とした経過日数(時間、分、秒等は小数点以下で表現)。

シリアル値をUNIXタイムスタンプに変換する際には、タイムスタンプに変換したい日付のシリアル値とUNIXエポック(1970-01-01 00:00:00)のシリアル値の差を求め、秒数に変換した上で時差分(日本標準時は協定世界時+9時間なので、9時間分)の秒数を減算した。

UNIXタイムスタンプをシリアル値に変換するには、その逆をやってやれば良いという寸法。
つまりタイムスタンプから時差分の秒数を加算し、日数に変換してから、UNIXエポック(1970-01-01 00:00:00)のシリアル値を足す。

実際にやってみるとこんな感じ。

一応PHPで検算してみる。

<?php
echo date('Y-m-d H:i:s', 1644332400);
実行結果

いいんじゃないだろうか。

ここまでやってて気づいたけど(今更)、UNIXタイムスタンプはあくまで協定世界時が基準になってるけど、Excelのシリアル値は動作させてる端末のタイムゾーンが基準になってるのね。

協定世界時基準だったらこの値は1.375になる筈(1+24/9)
この記事をシェアする