【问题标题】:How do I convert a 12 hour time string into a C# TimeSpan?如何将 12 小时时间字符串转换为 C# TimeSpan?
【发布时间】:2011-01-11 18:31:11
【问题描述】:

当用户填写表单时,他们会使用下拉菜单来指明他们希望安排测试的时间。此下拉列表包含一天中的所有时间,以 12 小时 AM/PM 形式以 15 分钟为增量。例如,如果用户选择下午 4:15,服务器将字符串 "4:15 PM" 发送到带有表单提交的网络服务器。

我需要了解如何将此字符串转换为时间跨度,以便将其存储在数据库的时间字段中(使用 linq to sql)。

有人知道将 AM/PM 时间字符串转换为时间跨度的好方法吗?

【问题讨论】:

    标签: c# timespan


    【解决方案1】:

    您可能想要使用DateTime 而不是TimeSpan。您可以使用DateTime.ParseExact 将字符串解析为 DateTime 对象。

    string s = "4:15 PM";
    DateTime t = DateTime.ParseExact(s, "h:mm tt", CultureInfo.InvariantCulture); 
    //if you really need a TimeSpan this will get the time elapsed since midnight:
    TimeSpan ts = t.TimeOfDay;
    

    【讨论】:

    • 此示例实际上不适用于诸如“11:00 PM”之类的字符串。大写“H”格式表示 24 小时制。使用小写的“h”可以解决这个问题。
    • 这是一个非常重要的细节。确认并编辑。
    • 如果时间为“h:mm tt”格式,即下午 4.15,此方法有效,但当时间为“hh:mm tt”格式,即下午 12.45 时无效。是否有两种格式都适用?
    • @gurrawar 您可以使用字符串[] 重载格式来支持单个解析中的多种格式
    【解决方案2】:

    最简单的方法是这样的:

    var time = "4:15 PM".ToTimeSpan();
    

    .

    这会获取 Phil 的代码并将其放入辅助方法中。这是微不足道的,但它使它成为一个单行调用:

    public static class TimeSpanHelper
    {        
        public static TimeSpan ToTimeSpan(this string timeString)
        {
            var dt = DateTime.ParseExact(timeString, "h:mm tt", System.Globalization.CultureInfo.InvariantCulture);            
            return dt.TimeOfDay;
        }
    }
    

    【讨论】:

    • 格式字符串应为“h:mm tt”,如果“AM/PM”之间没有空格,则为“h:mmtt”。
    • @DanRandolph 感谢您的建议,我已经按照上述方法编辑了解决方案。
    【解决方案3】:

    试试这个:

    DateTime time;
    if(DateTime.TryParse("4:15PM", out time)) {
         // time.TimeOfDay will get the time
    } else {
         // invalid time
    }
    

    【讨论】:

      【解决方案4】:

      我最喜欢 Lee 的回答,但如果你想使用 tryparse,acermate 是正确的。要结合它并获得时间跨度,请执行以下操作:

          public TimeSpan GetTimeFromString(string timeString)
          {
              DateTime dateWithTime = DateTime.MinValue;
              DateTime.TryParse(timeString, out dateWithTime);
              return dateWithTime.TimeOfDay;
          }
      

      【讨论】:

        【解决方案5】:

        试试:

        string fromServer = <GETFROMSERVER>();
        var time = DateTime.Parse(fromServer);
        

        如果您还创建了结束时间,您可以通过使用 DateTime 对象进行算术来获得时间跨度。

        【讨论】:

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