簡體   English   中英

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.

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