[英]C# DateTime.ParseExact for “2012-09-03T06:35:31Z”
在C#中,我試圖將“ 2012-09-03T06:35:31Z”轉換為日期時間:
Date = DateTime.ParseExact( "2012-09-03T06:35:31Z", ???);
我不確定如何解析其余功能
//using System.Globalization; should be at top
Date = DateTime.ParseExact("2012-09-03T06:35:31Z", "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)
請參閱自定義日期和時間格式文檔 。 這類似於可排序格式 ,但末尾帶有Z。
您沒有說格式是否一直指定為UTC並以Z
表示。
如果是這樣的話
DateTime.ParseExact(
yourDateString, @"yyyy\-MM\-ddTHH:mm:ss\Z",
CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)
會做的很好。
但是,如果您要使用的標准未指定UTC,則您必須處理的輸入也可能是例如2012-09-03T06:35:31+05:00
2012-09-03T06:35:31+0500
或2012-09-03T06:35:31+0500
取決於使用的ISO 8601格式Z
是+00:00
的特殊格式。 如果您需要處理這種可能性,則首先要創建一個DateTimeOffset
,然后從中獲取等效的UTC DateTime
:
DateTimeOffset.ParseExact(yourDateString,
new string[]{@"yyyy\-MM\-ddTHH:mm:sszzz",@"yyyy\-MM\-ddTHH:mm:ss\Z"},
CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).UtcDateTime
注意,我們仍然使用AssumeUniversal
。 這是因為第二種格式說“ AZ將出現在這里”,但是該方法隨后將其忽略,因此我們必須將這種形式顯式解釋為UTC。 使用第一種格式時, zzz
將給出時區,因此AssumeUniversal
被忽略。 (或者換一種說法,除非另有說明,否則它假定是通用的,而該格式的確說明了其他情況)。
看起來您正在嘗試解析Xml日期。 如果是這種情況,我建議使用XmlConvert類。
Date = System.Xml.XmlConvert.ToDateTime("2012-09-03T06:35:31Z", XmlDateTimeSerializationMode.Local);
您將需要將XmlDateTimeSerializationMode更改為適當的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.