【问题标题】:How to Convert string "07:35" (HH:MM) to TimeSpan如何将字符串“07:35”(HH:MM)转换为 TimeSpan
【发布时间】:2014-06-23 14:55:35
【问题描述】:

我想知道是否有办法将 24 小时格式的字符串转换为 TimeSpan。

现在我有一种“旧时尚风格”:

string stringTime = "07:35";
string[] values = stringTime.Split(':');

TimeSpan ts = new TimeSpan(values[0], values[1], 0);

【问题讨论】:

标签: c# timespan


【解决方案1】:

虽然这是正确的:

TimeSpan time = TimeSpan.Parse("07:35");

如果您将其用于验证...

TimeSpan time;
if (!TimeSpan.TryParse("07:35", out time))
{
    // handle validation error
}

请考虑TimeSpan 主要用于处理经过的时间,而不是一天中的时间。它将接受大于 24 小时的值,也将接受负值。

如果您需要验证输入字符串是否为有效时间(>= 00:00 和

DateTime dt;
if (!DateTime.TryParseExact("07:35", "HH:mm", CultureInfo.InvariantCulture, 
                                              DateTimeStyles.None, out dt))
{
    // handle validation error
}
TimeSpan time = dt.TimeOfDay;

另外一个好处是,只要您提供适当的格式字符串,例如 "h:mm tt",这还将解析包含 AM 或 PM 的 12 小时格式时间。

【讨论】:

  • DateTime.TryParse 很慢,DateTime.TryParseExact 快几英里。我的理解是TryParse 尝试一组模式来查看是否有任何匹配,如果您所追求的格式位于该列表的底部,那么它的大量开销很容易避免
  • 我无法解析超过 24 小时的时间
  • @alansiqueira27 - TimeSpan 可以表示 >= 24 小时,但作为字符串,它将它们视为“天”。所以ParseExact 等无法解析它们。如果有其他令牌允许它会很好,但可惜没有。相反,可以手动解析此类字符串,例如in this answer
【解决方案2】:

试试

var ts = TimeSpan.Parse(stringTime);

使用较新的 .NET,您还拥有

TimeSpan ts;

if(!TimeSpan.TryParse(stringTime, out ts)){
     // throw exception or whatnot
}
// ts now has a valid format

这是在 .NET 中解析字符串的一般习惯用法,第一个版本通过抛出 FormatException 处理错误字符串,而后者让 Boolean TryParse 直接为您提供信息。

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      您可以使用以下代码转换时间。

      TimeSpan _time = TimeSpan.Parse("07:35");
      

      但如果你想获取当前时间,可以使用以下代码:

      TimeSpan _CurrentTime = DateTime.Now.TimeOfDay;
      

      结果将是:

      03:54:35.7763461
      

      用一个对象可以包含小时、分钟、秒、刻度等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多