[英]How to handle format specifiers in TimeSpan.TryParseExact(…)
[英]TimeSpan.TryParseExact not working
我正在嘗試從字符串中檢索時間跨度,但 TryParseExact 返回 false(失敗)。
我看不出我做錯了什么,你能幫忙嗎? 我在代碼中嘗試了我的行的 2 個版本,都不起作用。
TimeSpan.TryParseExact("04:00:01","HH:mm:ss",CultureInfo.CurrentCulture, out aTime)
和
TimeSpan.TryParseExact("04:00:01","HH:mm:ss", null, out aTime)
編輯:這里的兩個響應都是正確的,我的自定義時間跨度格式有錯誤的格式 - 我犯的錯誤是假設 DateTime 的自定義格式適用於 TimeSpans,但他們沒有。
問題只在於TimeSpan的格式字符串,您指定了"HH:mm:ss"
。 說明符HH
(大寫)對於時間跨度無效。 你應該用hh
格式字符串確實區分大小寫。
冒號( :
)也需要轉義,所以使用"hh\\\\:mm\\\\:ss"
, @"hh\\:mm\\:ss"
或"hh':'mm':'ss"
這三種形式都會產生同樣的效果。
您可以在此處查看TimeSpan的有效自定義格式字符串列表。 並且TimeSpan的標准格式字符串在這里 。
雖然HH
對DateTime和DateTimeOffset有效,其中它表示24小時制,而小寫hh表示12小時制,而對於TimeSpan,小時組件始終基於24小時。 你會認為HH
格式是選擇的,為了統一,但不是 - 它是hh
可能應該提到你需要逃避冒號角色。
TryParseExact("04:00:01", "HH\\:mm\\:ss" ...
您傳遞的字符串格式是錯誤的。
var res=TimeSpan.TryParseExact("04:00:01", "g", CultureInfo.CurrentCulture, out aTime);
g-一般短格式,對文化敏感。
也許您使用了多種格式。
public const string TimeFormat1 = "hh\\:mm";
public const string TimeFormat2 = "hh\\:mm:\\ss";
var parsed = TimeSpan.TryParseExact(time, new [] { TimeFormat1, TimeFormat2 }, CultureInfo.CurrentCulture, out TimeSpan ts1);
// parsed is always false
您可能認為自己逃脫了結腸; 但實際上並沒有...
這個"hh\\\\:mm:\\\\ss"
不起作用。
在 ParseExact 中使用 TimeFormat2 會引發 FormatException...
您打算改用這個"hh\\\\:mm\\\\:ss"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.