[英]How to parse a string to DateTime with “yyyyMMdd Hmm” format?
[英]How can I parse a datetime with a nonstandard format (yyyyMMdd:Hmm)?
我們有一個集成合作伙伴堅持以yyyyMMdd:Hmm
格式將日期時間作為字符串發送給我們,例如“20211029:102”。 請注意,小時沒有前導零。
我試圖像這樣解析它:
Datetime datetime = DateTime.ParseExact(
"20211029:102",
"yyyyMMdd:hmm",
CultureInfo.InvariantCulture,
DateTimeStyles.None
);
但這導致
FormatException••• 字符串“20211029:102”未被識別為有效的日期時間。
我可以通過重新添加缺失的零來使其工作,例如:
string datetimeParts = "20211029:102".Split(":");
string value = datetimeParts[0] + datetimeParts[1].PadLeft(4, '0');
Datetime dt = DateTime.ParseExact(
value,
"yyyyMMddHHmm",
CultureInfo.InvariantCulture,
DateTimeStyles.None
);
但我覺得我不需要“預解析”這個值。 是否可以在不進行預處理的情況下解析這種格式?
問題出在格式字符串的時間部分,所以我的回答將解釋為什么你不能用格式字符串Hmm
解析102
。 (我知道你寫了hmm
,但由於你沒有 AM/PM 指示符,我假設你打算寫Hmm
。同樣的推理適用於hmm
。)
如果我們查看參考源,我們可以看到 DateTime 解析器是“貪婪的”:如果解析器遇到單字母格式說明符(例如H
) ,它仍然會嘗試消耗 2 位數字,如果兩位數是可用。
在您的情況下,有兩個數字可用,因此H
將消耗10
of 102
。 這分鍾只剩下2
,這與mm
不匹配(因為它只有一個數字)。
鑒於此限制,無法使用 DateTime.ParseExact 解析格式為Hmm
的DateTime.ParseExact
值。 該文檔記錄了以下內容:
筆記
如果
format
是不包含日期或時間分隔符(例如“yyyyMMddHHmm”)的自定義格式模式,請使用不變區域性作為provider
參數和每個自定義格式說明符的最寬形式。 例如,如果要在格式模式中指定小時數,請指定更寬的形式“HH”,而不是更窄的形式“H”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.