亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從 UTC 偏移量獲取日期時間

如何從 UTC 偏移量獲取日期時間

C#
米脂 2022-09-04 17:03:23
我正在嘗試弄清楚如何使用UTC偏移值獲取實例,無論當前系統是哪個UTC,我都必須獲得所需的UTC偏移量。DateTimeDateTime我看到的所有帖子都是關于從中獲取UTC字符串數據的,我也看到有一個帖子說如何使用電流計算差異來獲得另一個,這似乎不能很好地工作,因為我需要代碼才能工作,無論系統使用哪個UTC。DateTimeDateTimeDateTime到目前為止,我嘗試過什么:public static void Main(string[] args) {    DateTime utcDateTime = DateTime.UtcNow;    TimeSpan offSet = TimeSpan.FromHours((double)-4.00); // UTC-4    DateTime newDateTime = utcDateTime.Add(offSet);    Console.WriteLine(newDateTime);}這是我在另一篇文章中看到的,但看起來它只是以錯誤的方式改變了小時。請幫忙。
查看完整描述

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 庫在任何平臺上使用任一組標識符。


查看完整回答
反對 回復 2022-09-04
?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

為什么你們所有人都給出了如此復雜的答案?

這是錯的嗎?

DateTime.UtcNow.AddHours(-4); //UTC-4


查看完整回答
反對 回復 2022-09-04
  • 2 回答
  • 0 關注
  • 125 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號