(.Net,ADSI)Active Directory LastLogonTimestampを現在の時刻に変換

ActiveDirectoryからADSIを使って LastLogon , LastLogonTimestamp を取るときの注意点ですが、これらの値は 1601/01/01 00:00:00からのミリ秒を64ビットの値として持っているようです。
(WindowsAPIのFILETIME 構造体がこのような仕様みたいです。ちなみにUnix時間は1970/01/01 00:00:00から32bitでカウントしてましたね。)

その FLETIME 構造体形式の値を .Net の DateTime に変換するのは下記のように書けばいいようです。(C#)


//.Net 3.5以降
//1601/01/01からミリ秒をDateTimeに変換
Int64 lastLogonTimestamp = (Int64)sResult.Properties["lastLogon"][0];
DateTime baseDateTime = new DateTime(1601,01,01);
usr.dmLastLogon = TimeZoneInfo.ConvertTimeFromUtc(
baseDateTime.AddTicks(lastLogonTimestamp), TimeZoneInfo.Local);


参考:
Active Directory lastLogonTimestampを現在の時刻に変換
[PR]
by jehoshaphat | 2010-03-21 09:34 | .Net開発 | Trackback | Comments(0)
トラックバックURL : http://jehupc.exblog.jp/tb/12344572
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。


<< (.Net,ADSI)User... (.Net)SIDを文字列に変換 >>