[英]Short Time with DateTime.ParseExact
我想解析一下。 我已經多次看到這個問題/答案,但不是針對這個具體情況。 這是我的代碼:
var time1 = DateTime.ParseExact("919", "Hmm", CultureInfo.InvariantCulture);
也
var time2 = DateTime.ParseExact("919", "Hmm", null);
兩者都是一樣的
“字符串未被識別為有效的DateTime”
我想要的是9:19 AM
。
有關更多信息,我還需要解析“1305”
作為1:05 PM
,這是正常的。
在我看來,我正在使用正確的格式。 我在俯瞰什么?
我不知道有一個可以處理該任何格式。 問題是“H”可以是一個數字或兩個數字,所以如果有兩個數字可用,它將同時抓取兩個 - 在這種情況下將其解析為小時91,這顯然是無效的。
理想情況下,您將格式更改為HHmm
- 在適當的位置對值進行零填充 - 因此“0919”將進行解析。 或者,使用格式的冒號來區分小時和分鍾。 我不相信有任何方法可以使DateTime
解析為“919”的值,因為你需要它...所以你需要在解析它之前以某種方式調整字符串。 (我們沒有足夠的背景來推薦一種特殊的方式。)
是的,你的格式是正確的,但由於H
說明符 可能是2
字符, ParseExact
方法嘗試將91
解析為小時,這是一個無效小時,這就是為什么你在兩種情況下都得到FormatException
。
4個月前,我聯系了微軟團隊了解這種情況。 看一看;
他們建議在字符串中使用2位數字形式或在它們之間插入日期分隔符。
var time1 = DateTime.ParseExact("0919", "Hmm", CultureInfo.InvariantCulture);
要么
var time1 = DateTime.ParseExact("9:19", "H:mm", CultureInfo.InvariantCulture);
你不能將0
前綴排除在小時之外。 這有效
var time1 = DateTime.ParseExact("0919", "Hmm", CultureInfo.InvariantCulture);
也許你想在解析前只用前導零的3個字符前綴。
非常感謝所有答案。 我無法控制正在創建的文本,所以對我來說最簡單的解決方案似乎是前綴為零,而不是在中間添加冒號。
var text = "919";
var time = DateTime.ParseExact(text.PadLeft(4, '0'), "Hmm", null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.