簡體   English   中英

使用DateTime.ParseExact的短時間

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

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