この記事の内容
- ADから取得した時間系のカラム(例えばpwdLastSet)をUNIX TIMEに変換する方法
ポイント
- NTタイムエポックの特性を理解して事前計算
- その後、Dateコマンドで変換
目次
手順
NTタイムエポックはWindows特有のタイム値で何故か1601年からの経過したナノ秒というよくわからない体系の値です。
当然、UNIX系OSでは扱えません。
しかしUNIX系からADに接続して情報を取る場合もあるでしょう。ということで今回の対応でNTタイムエポックをUNIXでも扱える時間に変換します。
手順は以下の通りです。
- ナノ秒を10000000で除算する
- 除算後の値から11644473600を引く(ここで1900年起点に秒を合わせる)
大変シンプル!つまりこういう計算ですね。
まずは時刻計算
【NTタイムエポック】/10000000 - 11644473600
これで秒数をUNIXタイムに合わせることができました。
そして、この値をDateコマンドに食わせれば日時が得られます!
次にDateコマンド実行
今度は計算した値をDateコマンドに突っ込みます。
Dateコマンドは以下のような書式と実行結果です。
[root@aa01 opt]# date --date @1664846809
2022年 10月 4日 火曜日 10:26:49 JST
こんな感じで実行します。
@マークで指定するとUNIXタイムとして扱ってねと言う指示になります。
では、ここに先ほどの計算式をあてはめます。
コマンドの中でコマンドを実行するには、該当のコマンドを$()で囲みます。
つまり、こう。
[root@aa01 opt]# date --date @$(expr 133093204093978353 / 10000000 - 11644473600)
2022年 10月 4日 火曜日 10:26:49 JST
ということで、無事にNTタイムエポックからUNIXタイムに変換してDateコマンドで時刻に変換できました!