簡體   English   中英

C# 解析為 yyyy-MM-ddTHH:mm:ss 格式字符串未被識別為有效的日期時間

[英]C# Parse to the yyyy-MM-ddTHH:mm:ss format String was not recognized as a valid DateTime

我正在嘗試解析Mon, 11 Mar 2019 09:13:16 +01002019-03-11T09:13:16

string dataa = "Mon, 11 Mar 2019 09:13:16 +0100";
DateTime d = new DateTime();
d = DateTime.ParseExact(dataa,"yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine("data: "+d);

但錯誤是:

字符串未被識別為有效的 DateTime。

是否有任何方法可以自動進行此解析? 謝謝大家。

更新

如下所述,就像其他用戶回復我一樣,我首先需要函數 ToString(String, IFormatProvider)。

當您使用ParseExact ,您的字符串和格式應該完全匹配。

正確的格式是: ddd, d MMM yyyy hh:mm:ss zzz (或HH ,取決於您的小時格式)

解析后,您需要使用ToString將其格式化為yyyy-MM-dd'T'hh:mm:ss格式(或HH取決於您想要12 小時制還是24 小時制格式)

我想我必須添加一些很多人混淆的解釋(特別是編程初學者)。 一個DateTime實例沒有任何格式。 它只有日期和時間值,基本上是一個名為Ticks的數值。 當您談論“格式”概念時,它指向文本表示,即string

由於您說“ Mon, 11 Mar 2019 09:13:16 +0100 to 2019-03-11T09:13:16 ”,我(可能還有很多人)假設您有一個字符串作為Mon, 11 Mar 2019 09:13:16 +0100並且您想從中獲取2019-03-11T09:13:16作為字符串。 為此,您需要先將字符串解析為 DateTime。 為此,正如您所做的那樣, ParseExact是一種選擇。

當您將其解析為DateTime ,您會使用ToString方法獲得它的文本表示形式,即string 此方法有一些重載,您應該使用ToString(String, IFormatProvider)重載 這樣,您將輸出格式指定為第一個參數,將您的文化信息指定為第二個參數,由於:/格式說明符,這可能會影響您的結果字符串,因為它們可以根據當前文化或提供的文化進行更改。

進一步閱讀: 自定義日期和時間格式字符串

您需要指定輸入數據的格式( DateTime.ParseExact的第二個參數)。 在您的情況下,您提供的數據格式為ddd, d MMM yyyy hh:mm:ss zzz 此外,在最后一行打印結果時,您必須對其進行格式化。

所以,這是你必須做的:

string dataa = "Mon, 11 Mar 2019 09:13:16 +0100";
DateTime d = new DateTime();
d = DateTime.ParseExact(dataa, "ddd, d MMM yyyy hh:mm:ss zzz", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine("data: " + d.ToString("yyyy-MM-dd'T'hh:mm:ss"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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