VB.NET でも UNIX のエポックタイムが使いたい[プログラミング]
(2011-03-06 15:48:41) by shinoda


Perl プログラマ(つーか UNIX系のプログラマ)なら誰でも Epoc Time を処理のトリガーに使うのはよくあるだろう。
例えば、データの作成日時として記録しておき、現在の Epoc Time との差で秒数が求められるので、24時間以上前に作ったデータかどうかチェックするなら、

if ((time - $sakusei_epoc) >= (24 * 60 * 60)) {
    ほげほげ処理;
}

とかね。

実際、日付を「2011-03-06 15:33:27」みたいな文字列で管理するのは面倒くさいからなあ。(人間が見ないのであれば、そのまま Epoc Time で書き出しておくのが、色々便利)

ちなみに、UNIX の Epoc Time というのは、「1970/01/01 00:00:00」からの経過秒のことである。
例えば「2011-03-06 15:33:27」は、「1970/01/01 00:00:00」から 1,299,393,207秒経過している。
だから、Perl で「2011-03-06 15:33:27」に、

print (time);

ってすると、1299393207 が表示される。

で、一応、Visual Basic.NET にも「経過時間」というのはあるんだけど、「0001/01/01 00:00:00」からの、100ナノ秒単位での経過時間なのだ。
だから、「2011-03-06 15:33:27」に、

Dim now As DateTime = DateTime.Now
Console.WriteLine(now.Ticks())

ってすると 634350224076061874 が表示される。

例えば、UNIX で作成したファイルに Epoc TIme が書かれていて、VB.NET のプログラムでその値と現在の時間を比較しようとすると問題があるんじゃね。

つーことで、

Dim epocTime As Long = (DateTime.Now.Ticks - DateTime.Parse("1970/01/01 00:00:00").ToLocalTime.Ticks) \ 10000000

みたいに、経過100ナノ秒から 1970/01/01 までの時間を引いて、それを 10000000 で割ったもの(小数点以下は切り捨て)を使えばええっちゅうわけやね。


コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8