簡體   English   中英

將3位數輸入解析為TimeSpan

[英]Parsing 3 digit input as TimeSpan

用戶輸入為555,我希望它為05:55:00(時間跨度)。 怎么把它轉換成TimeSpan? 使用什么格式?

var a = TimeSpan.ParseExact(/*user input string*/"5:55", new string[] { "%h\\:mm" }, CultureInfo.InvariantCulture);//OK output {05:55:00}
var b = TimeSpan.ParseExact(/*user input string*/"1111", new string[] { "%hmm" }, CultureInfo.InvariantCulture);//OK output {11:11:00}
var c = TimeSpan.ParseExact(/*user input string*/"555", new string[] { "%hmm", "hmm", "hhmm"}, CultureInfo.InvariantCulture);//Exception! None format works.

編輯:詳細信息,我想格式化用戶字符串輸入格式為小時和分鍾hh:mm。 例如,用戶輸入字符串:

  • “ 5”為05:00
  • “ 12”為12:00
  • “ 1111”為11:11
  • “ 12:12”為12:12
  • “ 4:44”為4:44
  • 並且一個不工作的“ 555”為5:55(拋出異常)

現在我正在使用:

private static string[] _foramts = {"%hmm", "hmm", "hhmm","%h", "hh\\:mm", "%h\\:mm" };
return TimeSpan.ParseExact((string)value, _foramts, CultureInfo.InvariantCulture).ToString("hh\\:mm");

使用PadLeft,現在也不例外,但是....

var d = TimeSpan.ParseExact(((string)value).PadLeft(4, '0'), new string[]  { "%hmm", "hmm", "hhmm", "%h", "hh\\:mm", "%h\\:mm" }, CultureInfo.InvariantCulture).ToString("hh\\:mm");

“ 5”現在是00:05,我希望它是05:00

我只是找到了解決方案,但沒有按格式。 只需輸入用戶字符串輸入.PadLeft(4,'0') 還是我很好奇可以用格式嗎?

編輯:但是現在這不能按預期工作:

var b = TimeSpan.ParseExact("5", new string[] { "%h" }, CultureInfo.InvariantCulture);

.PadLeft(4,'0')會引發異常:(

問題是H格式會根據可用的位數匹配一位或兩位數。 在您的情況下,它將獲取前兩個數字“ 55”,這不是正確的小時數。 用零填充是解決此問題的方法:

 var c = TimeSpan.ParseExact(value.PadLeft(4, '0'), new string[] { "%hmm", }, CultureInfo.InvariantCulture);

如果要處理不同的格式,則嘗試使用一種模式匹配所有可能的輸入的純老式if-els會更容易。

public static TimeSpan Parse(string value) {

    if (value.Length == 1)
    {
        value = value.PadLeft(2, '0');
        value = value.PadRight(4, '0');
    }
    else if (value.Length == 2)
    {
        value = value.PadRight(4, '0');
    }
    else if(value.Length == 3)
    {
        value = value.PadLeft(4, '0');
    }

    return TimeSpan.ParseExact(value, new string[] { "%h\\:mm", "%hmm", "hmm", "hhmm" }, CultureInfo.InvariantCulture);//Exception! None format works.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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