【问题标题】:Parse exact custom time format?解析精确的自定义时间格式?
【发布时间】:2013-11-21 14:34:42
【问题描述】:

我似乎无法为我的TimeSpan.ParseExact() 设置正确的自定义格式:

预期的时间样本:

1:23:45.6
23:45.6
23:45
1:23:45

我使用的字符串格式:

string withTenthFormat = @"[%h\:]mm\:ss[\.%f]";

尝试选择几小时和几分之一秒。然而,使用这种格式和CultureInfo.InvariantCulture 确实会导致FormatException。我错过了什么?

【问题讨论】:

    标签: c# timespan


    【解决方案1】:

    我不知道在自定义格式字符串中指定可选部分的能力。我建议您使用多个格式字符串,并使用采用格式数组的TimeSpan.ParseExact 的重载。

    string[] formats = { @"h\:mm\:ss\.FFF", @"mm\:ss\.FFF",
                         @"h\:mm\:ss", @"mm\:ss"};
    string[] values = { "1:23:45.6", "23:45.6", "23:45", "1:23:45" };
    
    foreach (string value in values)
    {
        var parsed = TimeSpan.ParseExact(value, formats,
                                         CultureInfo.InvariantCulture);
        Console.WriteLine(parsed);
    }
    

    (我使用FFF 作为毫秒说明符,以便您也可以表达“1:23:45.67”。如果您只曾经想要数百毫秒,Ff 可以。)

    【讨论】:

      【解决方案2】:

      我会简单地使用DateTime.ParseExact,因为它更强大:

      string[] strings = new[] { "1:23:45.6", "23:45.6", "23:45", "1:23:45" };
      string[] formats = new[] { "H:mm:ss.f", "H:mm.f", "H:mm", "H:mm:ss" };
      TimeSpan[] timespans = strings
          .Select(str =>
          {
              TimeSpan? ts = null;
              DateTime dt;
              if (DateTime.TryParseExact(str, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
                  ts = dt.TimeOfDay;
              return ts;
          })
          .Where(ts => ts.HasValue)
          .Select(ts => ts.Value)
          .ToArray();
      

      Demonstration

      【讨论】:

      • 但它不会解析您要解析的内容 - 当您确保始终处理您实际使用的类型时,日期和时间处理会简单有兴趣。TimeSpan.ParseExact 可以在这里正常工作。
      • 点了。但是,我保留答案以表明您也可以使用支持更多格式的DateTime.ParseExact 解析TimeSpans,它是easier to use,并且在.NET 4 下也可用。
      • 只要你想解析小于24小时的值,当然可以。如果你想允许几天,它变得更加棘手。而且我同意 .NET 中的 TimeSpan 解析比它应该的更挑剔。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多