Active Directory に LDAP 経由でアクセスした際に入っている pwdLastSet という属性が欲しいのですが、
この数字、「1601-01-01 から始まる 100nsec 単位の秒数」とかいう、何というかセンスがないというか、
取扱いにくいことこの上ないデータだな、と思うのですが、使う必要があったので、取り出し方をいろいろ試した。
結果、下記のようなコードが良さげ
Time::Piece のほうが軽くてわかりやすくて、僕は好きなのですが、1601 年渡したらダメだったみたいなので、
DateTime にしました。あとは最初にかいたロジックどおりに変換かけてるだけです。$real_sec の算出時に $pwd_last_set_epoch を
足してるところは、「引き算じゃないの?」って最初思ってたのですが、$pwd_last_set_epoch が負数になるので足し算でいいっぽいです。
うーん、なんかこの辺バッドノウハウくさい、というか怪しい、というか、32bit/64bit とかで計算結果変わったりしそうで嫌だな。
(一応変わらなかったみたいなのですが)