LoginSignup
1
1

More than 5 years have passed since last update.

【殴り書き】C#におけるうるう秒調査

Last updated at Posted at 2015-05-26

まずは、1秒手前の正常?な時間をUnixTimeStampで表示してみる。

var localDate = "2015-07-01 08:59:59";
var timespan = DateTime.Parse(localDate).toUniversalTime() - new DateTime (1790,1,1,0,0,0, DateTimeKind.Utc);
Debug.Log((uint)timespan.TotalSeconds);

結果
1435708799

次に、2015-07-01 08:59:60をDateTime型にパースしてみる。

var localDate = "2015-07-01 08:59:60";
var timespan2 = DateTime.Parse(localDate).toUniversalTime() - new DateTime (1790,1,1,0,0,0, DateTimeKind.Utc);
Debug.Log((uint)timespan2.TotalSeconds);

結果
FormatException: String was recognized as a valid DateTime.

次に、2015-07-01 08:59:60のUnixTimeStampをDateTime型に入れるとどう表記されるか見てみる。

double timestamp = 1435708800u;
var localDate = new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc).Addseconds (timestamp).ToLocalTime ();
Debug.Log(localDate.ToString("yyyy-MM-dd HH:mm:ss"));

結果
2015-07-01 09:00:00

まぁそりゃそうか・・・っていう感じの結果。
timestampで扱っている場合は大丈夫。
59分60秒のtimestampを9時としてしまうが、1秒ぐらいの差はそんなに問題ではないような。
当日は9時丁度に終わるイベントとかがなければ問題になることはなさそう。
ただ、文字列で『2015-07-01 08:59:60』をパースするとエラーでるので、どちらかといえば、サーバー側とかログとかで時間を扱っている部分に気をつけて欲しいところ。

※.NETのunix timestampは0000年1月を基点としているので、1970年の1月1日に合わせる必要がある

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1