LoginSignup
9
10

More than 5 years have passed since last update.

Windows時間(NT タイムエポック)を相互変換する方法

Posted at

TL;DR

Unix タイムスタンプでは、1970年1月1日0時0分0秒からの秒数で表されているタイムスタンプですが、Windows では、1601年1月1日0時0分からの100ナノ秒単位で表されています。

Windows の世界では、NT タイムエポックが使われていることがよくあります。その変換方法をまとめてみました。

他の言語等随時Updateしていきます。

1. NT タイムエポック→日付

w32tm を使う

w32tm /ntte <NT タイムエポック>

> w32tm /ntte 131297012170000000
151964 03:13:37.0000000 - 2017/01/24 12:13:37

PowerShell を使う

[datetime]::FromFileTime(<NT タイムエポック>)

> [datetime]::FromFileTime("131297012170000000")
2017年1月24日 12:13:37

Excel を使う

計算式を使って自力で行う方法です。

<NT タイムエポック>/(8.64*10^11) - 109205 + (1/24)*9

これは、↓をしています。
1. NT タイムエポックを日数に変換
2. 1900年からの経過時間になる様に調整※
3. JST(UTC+9)を足す
※つまり、1601年から1899年の差分の日数を引いている。Excelは1900年を起点としたシリアル値で時間を保持している為。

また、↓のコメントを読むとExcelにはうるう年のバグがあるらしく、109206のところを109205としている様です。
https://social.technet.microsoft.com/wiki/contents/articles/12814.active-directory-lastlogontimestamp-conversion.aspx

2. 日付→NT タイムエポック

PowerShellを使う

(Get-Date "<日付時刻>").ToFileTime()

>  (Get-Date "2016/11/07 8:23:32").ToFileTime()
131229482120000000

参考

Active Directory: LastLogonTimeStamp Conversion
https://social.technet.microsoft.com/wiki/contents/articles/12814.active-directory-lastlogontimestamp-conversion.aspx

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10