実施環境
Splunk Free 8.2.2
Microsoft Office Professional Plus 2016
0. 概要
Splunk における日時データは、内部的には UNIX 時間の形式で格納されています。
このことを意識することはあまりありませんが、たまに UNIX 時間の形式そのままで取り扱いたい場合があります。
インターネットを探せば UNIX 時間の変換ツールはいくらでも転がっていますが、今回はそれらは使用せず、 Excel の機能のみを用いて変換を行います。
1. UNIX 時間
そもそも UNIX 時間(別名 POSIX 時間、エポック秒、ユニックス時刻、etc...)とは何でしょうか。
UNIX 時間とは、「1970年1月1日0時0分0秒」(別名 UNIX エポック)から経過した秒数で日時を表す形式です。
なお、この「1970年1月1日0時0分0秒」は協定世界時(別名 UTC )での日時であり、例えば日本の場合は+9時間して「1970年1月1日9時0分0秒」となることに注意が必要です。
実際に「 strptime 」関数を使用して、「2022年4月1日12時34分56秒」を Splunk 上で UNIX 時間に変換してみましょう。
なお、今回使用した Splunk では日本標準時(別名 JST )が適用されています。
| makeresults
| eval time_unix = strptime("2022/04/01 12:34:56", "%Y/%m/%d %H:%M:%S")
「1648784096」という値が出力されました。
これが日本標準時での「2022年4月1日12時34分56秒」の UNIX 時間表記となります。
2. Windows 1900 日付システム
次にエクセルの日時データですが、こちらはまた別の形式で日時データを内部的に保持しています。
それが、「 Windows 1900 日付システム」といわれる形式です。
この形式では、「1900年1月0日0時0分0秒」からの経過「日数」(すなわち、「1900年1月1日0時0分0秒」=1、「1900年1月2日0時0分0秒」=2、...となります)で日時を記述します。
日未満の時/分/秒は小数によって表現されます。
なお、こちらの形式では協定世界時かどうかを考える必要はないです。
実際にセルの表示形式を「数値」にして、「2022年4月1日12時34分56秒」をエクセル上で Windows 1900 日付システムに変換してみましょう。
「44652.5242592593」という値が出力されました。
これが「2022年4月1日12時34分56秒」の Windows 1900 日付システム表記となります。
3. UNIX 時間 と Windows 1900 日付システムの関係図
UNIX 時間 と Windows 1900 日付システムの関係は、以下の図のような形になっています。
4. UNIX 時間 ⇒ Windows 1900 日付システム
UNIX 時間を Windows 1900 日付システムに変換するには、以下のような操作を行います。
-
時差(今回は+09:00)を秒に変換し、 UNIX 時間に加算する
-
1の結果を日に変換する
-
2の結果に「25569日」を加算する
「25569日」は1900年1月0日から1970年1月1日の間の日数で、次のように算出されます。
1(日:1/0~1/1の補正分)+365(日)×70(年)+1(日:2/29分)×18(年:1900~1970の閏年の数)=25569
上記の式をエクセルで記載すると、以下のようになります。
=(UNIX時間+(時差*60*60))/(60*60*24)+(1+365*70+1*18)
5. Windows 1900 日付システム ⇒ UNIX 時間
先ほどとは逆に、 Windows 1900 日付システムを UNIX 時間に変換するには、以下のような操作を行います。
-
Windows 1900 日付システムから「25569日」を減算する
-
1の結果を秒に変換する
-
2の結果から時差(今回は+09:00)を秒に変換して減算する
上記の式をエクセルで記載すると、以下のようになります。
=(Windows1900日付システム-(1+365*70+1*18))*(24*60*60)-(時差*60*60)