UNIX系OS(C言語なども)は、1970年1月1日0時0分0秒 からの秒数をシステム時刻としてもっています。
一方、Windowsでは、1601年1月1日0時0分 からの経過時刻を 100ナノ秒単位 で持っているそうです。
ActiveDirectryの情報をPerlで取得したりすると、最終ログイン日時やパスワード変更日時が上記の秒数になって表示されているので、変換する必要があります。
Perlで書くと以下のようになります。
#!/usr/bin/perl
$time = shift(@ARGV);
#100ナノ秒単位なので秒に変換
$time = int($time / 10000000);
#1601年1月1日0時0分から1970年1月1日までの経過秒数を引く。これでUNIX時間になる。
$time = $time - 11644473600;
#UNIX時間からローカル時間に変換
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time);
$year = $year+1900;
$mon++;
print $year."/".$mon."/".$mday;