DateTime.Now
サーバーがカリフォルニアにあるとは限らないので使えない
質問する
17235 次
1 に答える
42
2 つのオプション:
1)TimeZoneInfo
とDateTime
:
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 ベースのゾーンも使用できます。)
- さまざまな種類の情報にはさまざまな種類があり、
DateTime
3 つの異なる種類の値を表現しようとする奇妙さを回避し、単に「日付」または「時刻」を表すという概念を持たない - テスト容易性を考慮して設計されています
于 2013-02-21T22:55:07.000 に答える