#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
これは、↓をしています。
- NT タイムエポックを日数に変換
- 1900年からの経過時間になる様に調整※
- 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