2008年06月25日

エポックタイム表記を時刻に変換する。

 何らかのアプリケーションでログを確認したとき、時刻の表記が数値のみの場合があります。

 「2008年6月25日 10:00:00」といったような表記であれば、直ぐに確認できるのですが、「1213601031」といったような表記がされていると、それがいったいいつなのかが分かりません。

 今回私個人的なことなのですが、あるアプリケーションのログを確認したところ、上記のような表記になっていて、一体いつなのかさっぱり分からないということがありました。

 メーカーに問い合わせしたところ、「エポックタイムで記載されています。」と返信が。。。。。

 エポックタイムって何?
 なんで数値だけ?

 そんな疑問を持ってしまい、どうしても解明せねば。。。という思いから、色々と調べてみました。

>>>


>>>

まずは「エポックタイム」から。

「1970年1月1日 0:00:00からの秒数であらわしたもの。」
つまり1970年1月1日から何秒経ったのかと言う数値。

 この数値を、分かりやすい○年○月○日何時と表記するには、どうすればいいの?

 と言うことで何とか調べられたので以下に紹介します。


 使うのはSystem.DateTime構造体
 まず、コンストラクタで日時を取得します。

 System.DateTime(int32-1,int32-2,int32-3)
 int32-1・・・年
 int32-2・・・月
 int32-3・・・日

 次にDateTime.Addsecondメソッドで、秒数を追加します。

 そうすれば、今現在の時刻が分かりますね。

<コード>
===================================
Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    'エポックタイムの開始日時を取得。
    Dim dt As New DateTime(1970, 1, 1)
    '開始日時から経過した秒数を追加。
    dt = dt.AddSeconds(1213601031)
    'ラベルに日時を表示
    Label1.Text = dt.ToString

  End Sub

End Class
===================================

 上記コードで表示した結果は以下の通りです。

 2008/06/16 7:23:51

 う〜ん、ちょっと微妙に違うんですね。
 で、もう少し調べてみた結果、上記時刻は、UTC(全世界で時刻を記録する際に使われる公式な時刻)時刻と分かった。
 つまり、9時間の時差があるんです。

 正確に時刻を表示させるには、上記に9時間をプラスさせる必要があるわけですね。

 ですので、ラベルに表示させる前に

 dt = dt.AddHours(9)

 を追加しましょう。

 追加した結果は、

 2008/06/16 16:23:51


 これで、私の欲しかった日時が取得できました。。。。。


 今回、「エポックタイム」と言うのをはじめて聞きましたが、UNIX系とかデータベース系では結構使われているんですね。




posted by Debring at 14:11 | Comment(0) | TrackBack(0) | VB2005 日付・時刻
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。