基本
時間を表す言葉には時刻と時間間隔があるので時間という言葉ではあいまいになる。
どちらの場合も単位と基準点が問題になる。単位は秒とかミリ秒とかのこと、基準はUTCとか日本時間のこと。
Unix time stamp
UTCで1970/1/1からの秒を表す。今の値はこことかでわかる。
C#でこの値を得るには以下のコード
1 |
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; |
C#のDateTimeは0001/1/1からの100ナノ秒で管理しているようだ。3つの引数をとるコンストラクタはグレゴリオカレンダーで初期化するのでこれでいいらしい。
javscriptでこの値を得るには以下のコード
1 |
var ts = Math.round((new Date()).getTime() / 1000); |
javascriptのDateはUTCで1970/1/1からのミリ秒で管理しているようだ。デフォルトのコンストラクタは今でgetTime()はミリ秒でUnix Epoch(=Unix time stamp)を返すので1000で割って秒にしている。
Unix time stampからオブジェクトをつくる
C#の場合は以下のようにやるらしい
1 2 3 4 5 6 7 |
public static DateTime UnixTimeStampToDateTime( double unixTimeStamp ) { // Unix timestamp is seconds past epoch System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc); dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime(); return dtDateTime; } |
これだとローカル時間が帰るので以下のように修正
1 2 3 4 5 6 7 |
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) { // Unix timestamp is seconds past epoch System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);//, System.DateTimeKind.Utc); dtDateTime = dtDateTime.AddSeconds(unixTimeStamp);//.ToLocalTime(); return dtDateTime; } |
1 |
var date = new Date(UNIX_Timestamp * 1000); |
ソースコード
https://github.com/ambiesoft/blogprogs/tree/master/5705