【问题标题】:Parse string in HH.mm format to TimeSpan将 HH.mm 格式的字符串解析为 TimeSpan
【发布时间】:2012-09-19 10:59:39
【问题描述】:

我正在使用 .NET framework v 3.5,我需要将表示时间跨度的字符串解析为 TimeSpan 对象。

问题是使用分隔符而不是冒号...例如13.00,或22.30

所以我想知道是否必须将 . 替换为 : 或者有更干净的方法来获得它。

【问题讨论】:

    标签: c# .net string parsing time


    【解决方案1】:

    解析出DateTime 并使用它的TimeOfDay 属性,这是一个TimeSpan 结构:

    string s = "17.34";
    var ts = DateTime.ParseExact(s, "HH.mm", CultureInfo.InvariantCulture).TimeOfDay;
    

    【讨论】:

      【解决方案2】:

      如果 TimeSpan 格式是像这样“9:00 AM”的十二小时时间格式,那么使用带有格式字符串“h:mm tt”的 TimeSpan.ParseExact 方法,像这样

      TimeSpan ts = DateTime.ParseExact("9:00 AM", "h:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
      

      谢谢。

      【讨论】:

        【解决方案3】:
        string YourString = "01.35";
        
        var hours = Int32.Parse(YourString.Split('.')[0]);
        var minutes = Int32.Parse(YourString.Split('.')[1]);
        
        var ts = new TimeSpan(hours, minutes, 0);
        

        【讨论】:

        • 我最喜欢这个答案!
        【解决方案4】:

        更新答案:

        不幸的是,.NET 3 不允许使用自定义 TimeSpan 格式,因此您只能手动执行某些操作。我会按照您的建议进行替换。

        原始答案(仅适用于 .NET 4+):

        使用TimeSpan.ParseExact,指定custom format string

        var timeSpan = TimeSpan.ParseExact("11.35", "mm'.'ss", null);
        

        【讨论】:

        • 3.5 中没有ParseExact :( !!
        • @PaoloMoretti:哎呀...正在寻找替代方案。
        • 使用\.转义.不是更好吗?
        • @Oded:真的一样。随机选择了这个表格。
        【解决方案5】:

        对于 .Net 3.5,您可以使用 DateTime.ParseExact 并使用 TimeOfDay 属性

        string timestring = "12.30";
        TimeSpan ts = DateTime.ParseExact(
                                          timestring, 
                                          "HH.mm", 
                                          CultureInfo.InvariantCulture
                                          ).TimeOfDay;
        

        【讨论】:

        • 这个解决方案太棒了!我自己找到了它,但它非常简单,现在您可以获得我们知道和喜爱的所有常用 DateTime 格式选项,并且可以按照我们第一次预期的方式将它们用于 TimeSpan。 - 请注意,这显然不适用于超过 24 小时的时间跨度......但大部分时间我在与单独跟踪日期和时间的外部系统集成时一直使用时间跨度,所以我们永远不会超过 23:59:59 :)
        【解决方案6】:

        试试这个(它对我有用):

        DateTime dt = Convert.ToDateTime(txtStartDate.Text).Add(DateTime.ParseExact(ddlStartTime.SelectedValue, "HH.mm", CultureInfo.InvariantCulture).TimeOfDay);
        

        startdate 将是一个字符串,如 28/02/2018,ddlstarttime 为 HH 格式,如 13.00

        【讨论】:

          猜你喜欢
          • 2010-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-12
          • 1970-01-01
          相关资源
          最近更新 更多