我們有一個集成合作伙伴,他堅持將日期時間作為字串格式發送給我們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
);
但我覺得我不需要“預決議”這個值。是否可以在沒有預處理的情況下決議這種格式?
uj5u.com熱心網友回復:
問題在于格式字串的時間部分,因此我的回答將解釋為什么您無法102使用格式字串進行決議Hmm。(我知道你寫了hmm,但由于你沒有 AM/PM 指示符,我假設你打算寫Hmm。同樣的推理適用于hmm。)
如果我們查看參考源,可以看到 DateTime 決議器是“貪婪的”:如果決議器遇到單字母格式說明符(例如H),它仍然會嘗試消耗 2 個數字,如果有兩個數字可用.
在你的情況,兩個數字都可用,所以H會消耗10的102。這僅2保留一分鐘,不會匹配mm(因為它只有一位數)。
鑒于這種限制,它不可能決議格式化為DateTime值Hmm有DateTime.ParseExact。檔案說明了以下幾點:
筆記
如果
format是不包含日期或時間分隔符的自定義格式模式(例如“yyyyMMddHHmm”),請使用provider引數的不變區域性和每個自定義格式說明符的最寬形式。例如,如果要在格式模式中指定小時,請指定較寬的形式“HH”,而不是較窄的形式“H”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314420.html
下一篇:元資料類組態檔決議器
