0

DateTime を 1970 年以降の秒数に変換するにはどうすればよいですか?

    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    DateTime date = DateTime.Parse(@"28/05/12 01:30");
    TimeSpan diff = date.ToUniversalTime() - origin;
    Console.WriteLine( (Math.Floor(diff.TotalSeconds)).ToString());

出力 = 1338161400

http://www.mbari.org/staff/rich/utccalc.htm 1338168600と比べて間違ってい ます

なんで ?

4

2 に答える 2

2

これは、タイム ゾーンの違いによる可能性が最も高いです。ToUniversalTime値を一時変数に保存して見ると、元の値が適切に変更されていることがわかるでしょう。

        DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
        DateTime date = DateTime.Parse(@"05/28/2012 01:30:00");
        date = date.ToUniversalTime();

私の場合、UniversalTime に設定した後に日付を見ると、東海岸にいるため、時刻が 5:30:00 と表示されます。

したがって、これを強制的に期待どおりにするために、実際に GMT になるように時間をシフトしました (日付を 4 時間変更します:

        DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
        DateTime date = DateTime.Parse(@"05/27/2012 9:30:00 pm");
        date = date.ToUniversalTime();
        TimeSpan diff = date - origin;
        Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString());

これにより、次の結果が得られます。1338168600

于 2012-05-27T23:59:06.083 に答える
0

.NETDateTime関連のクラスはJust Workと想定されています。多くの場合そうですが、現地時間以外で作業している場合は、詳細に注意を払う必要があります。(これは .NET 固有の問題ではありません。タイム ゾーン、特に DST はしばしば大きな頭痛の種となります。) 次のスニペットは、ロケールに関係なく適切な出力を生成するはずです。

DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
DateTime date = DateTime.Parse(@"28/05/12 01:30", null, System.Globalization.DateTimeStyles.AssumeUniversal);
TimeSpan diff = date.ToUniversalTime() - origin;
Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString());

両方の入力日付について、日付がローカル日付ではなく UTC 日付として表示されるように明示的に指定する必要があることに注意してください。呼び出しは不要に思えますToUniversalTime()が、適切な違いを生み出す必要があります。これは、マイナス演算子の実装における見落としのようです。

MSDNの DateTime、DateTimeOffset、および TimeZoneInfo の選択も参照してください。

于 2012-05-28T13:22:53.547 に答える