まずは、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日に合わせる必要がある