我无法使用DateTime.Now
因为服务器不一定位于加利福尼亚州
答案 0 :(得分:38)
两个选项:
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);
}
}
显然我有偏见,但我更喜欢使用Noda Time,主要是有三个原因:
DateTime
尝试表示三种不同价值的奇怪现象,并且没有仅表示“日期”或“一天中的时间”的概念“