その他ノウハウ

ADから取得した時刻(NTタイムエポック)をDateコマンドでUnixTimeに変換する

この記事の内容

  • 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コマンドで時刻に変換できました!

###############お知らせ################
ブログランキングのITカテゴリに参加してみました。
この記事が役に立ったなどお力になれたら、 このバナーを押していただけると嬉しいです。

#####################################

-その他ノウハウ