![](/img/trans.png)
[英]DateTime must contain TimeZone information and take Daylight Savings into account
[英]Create DateTime from string without applying timezone or daylight savings
如何從已針對 UTC 調整的字符串創建日期時間變量? 我在設置為 BST (GMT+1) 的機器上運行它。 如果我運行以下代碼行:
DateTime clientsideProfileSyncStamp = Convert.ToDateTime("20-May-2011 15:20:00");
然后在針對數據庫保存 (UTC) 值的測試中使用該值,然后看起來 Convert.ToDateTime() 實際上給我 14:20 的 UTC 值。 我不希望它進行轉換 - 我只是希望它接受我的 DateTime 字符串已經在 UTC 中。
謝謝。
解析字符串,並指定在字符串中未指定時區的情況下采用UTC時間:
DateTime clientsideProfileSyncStamp =
DateTime.Parse(
"20-May-2011 15:20:00",
CultureInfo.CurrentCulture,
DateTimeStyles.AssumeUniversal
);
@Guffa的答案很好,但我想補充一個答案。 如果您的日期時間字符串看起來像這樣的“ 2017-11-27T05:30:00.000Z”,則AssumeUniversal無法正常工作。 嘗試這個 :
DateTime.Parse("2017-11-27T05:30:00.000Z", null, System.Globalization.DateTimeStyles.AdjustToUniversal);
AssumeUniversal和AdjustToUniversal之間略有不同。 在這里閱讀: AssumeUniversal和AdjustToUniversal之間的區別
在DateTime字符串中添加一個Z
:
DateTime clientsideProfileSyncStamp = Convert.ToDateTime("20-May-2011 15:20:00Z");
Console.Write(clientsideProfileSyncStamp.ToUniversalTime()); // 20-May-2011 15:20:00
不要忘記TryParse
變體,它使您可以毫無例外地處理解析錯誤
DateTime clientsideProfileSyncStamp;
DateTime.TryParse(
"20-May-2011 15:20:00",
System.Globalization.CultureInfo.CurrentCulture,
System.Globalization.DateTimeStyles.AssumeUniversal,
out clientsideProfileSyncStamp
);
另外,如果您未使用ParseExact
或TryParseExact
,它將假定輸出Kind
為Local
因此您可能還想使用ToUniversalTime()
clientsideProfileSyncStamp.ToUniversalTime();
DateTime.Parse()
或DateTime.TryParse()
var clientsideProfileSyncStamp = DateTime.Parse("20-May-2011 15:20:00");
要創建與文化無關的日期時間,請使用:
DateTime.Parse("2022-02-15 09:30:47", CultureInfo.InvariantCulture)
然后日期始終與字符串中定義的完全一致。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.