2 回答

TA貢獻1856條經驗 獲得超17個贊
要以特定偏移量(例如 UTC-4)獲取當前時間,最簡單的方法(恕我直言)是:DateTime
DateTime dt = DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours(-4)).DateTime;
獲得相同結果的另一種(更混亂)方法是:
DateTime dt = DateTime.SpecifyKind(DateTime.UtcNow.AddHours(-4), DateTimeKind.Unspecified);
也可以將其保留為 ,這樣與UTC的偏移量就不會丟失。DateTimeOffset
DateTimeOffset dto = DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours(-4));
或者更混亂的方式:
TimeSpan offset = TimeSpan.FromHours(-4);
DateTime dt = DateTime.SpecifyKind(DateTime.UtcNow.Add(offset), DateTimeKind.Unspecified);
DateTimeOffset dto = new DateTimeOffset(dt, offset);
但是,在大多數情況下,人們可能不是使用固定的偏移量,而是在特定時區中查找時間,由于夏令時和特定政府觀察到的標準時間的變化,該時區可能具有各種不同的偏移量,具體取決于所討論的日期。
另請參閱時區標簽 wiki 中的“時區 != 偏移量”。
在 .NET 中,類可以為您管理此類更改。在Windows上,它使用Microsoft時區標識符,在Linux或Mac OSX上,它使用IANA時區標識符。例如:TimeZoneInfo
// On Windows:
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime dt = TimeZoneInfo.ConvertTime(DateTime.UtcNow, tz);
// On Linux/OSX:
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("America/New_York");
DateTime dt = TimeZoneInfo.ConvertTime(DateTime.UtcNow, tz);
在這兩個示例中,都將應用正確的 UTC 偏移量(UTC-5 表示 EST 或 UTC-4 表示 EDT)。
這些也可以使用值編寫:DateTimeOffset
// On Windows:
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTimeOffset dto = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tz);
// On Linux/OSX:
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("America/New_York");
DateTimeOffset dto = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tz);
此外,如果您需要編寫可在任一平臺上運行的代碼,則可以使用我的 TimeZoneConverter 庫在任何平臺上使用任一組標識符。
- 2 回答
- 0 關注
- 125 瀏覽
添加回答
舉報