10

DateTime.Nowサーバーがカリフォルニアにあるとは限らないので使えない

4

1 に答える 1

42

2 つのオプション:

1)TimeZoneInfoDateTime:

using System;

class Test
{
    static void Main()
    {
        // Don't be fooled - this really is the Pacific time zone,
        // not just standard time...
        var zone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
        var utcNow = DateTime.UtcNow;
        var pacificNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, zone);

        Console.WriteLine(pacificNow);
    }
}

2) 私のNoda Timeプロジェクトを使用してください :)

using System;
using NodaTime;

class Test
{
    static void Main()
    {
        // TZDB ID for Pacific time
        DateTimeZone zone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"];
        // SystemClock implements IClock; you'd normally inject it
        // for testability
        Instant now = SystemClock.Instance.Now;

        ZonedDateTime pacificNow = now.InZone(zone);        
        Console.WriteLine(pacificNow);
    }
}

明らかに偏見がありますが、主に次の 3 つの理由から、私は Noda Time を使用することを好みます。

  • TZDB タイム ゾーン情報を使用できます。これは、Windows 以外でより移植性があります。(BCL ベースのゾーンも使用できます。)
  • さまざまな種類の情報にはさまざまな種類があり、DateTime3 つの異なる種類の値を表現しようとする奇妙さを回避し、単に「日付」または「時刻」を表すという概念を持たない
  • テスト容易性を考慮して設計されています
于 2013-02-21T22:55:07.000 に答える