簡體   English   中英

針對“ 2012-09-03T06:35:31Z”的C#DateTime.ParseExact

[英]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+05002012-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM