如何在C#中比较HH:MM

时间:2011-10-18 14:22:23

标签: c#

嗨,我必须比较HH:MM(小时和分钟)。我怎么能这样做?

var t1 = DateTime.Now.ToString("HH:mm");
var t2 = "20:03";
var res =result(t1, t2);

public int result(string t1, string t2)
        {
            int i = -1;

            int hr1 = Convert.ToInt32(t1.Split(':')[0]);
            int hr2 = Convert.ToInt32(t2.Split(':')[0]);

            int min1 = Convert.ToInt32(t1.Split(':')[1]);
            int min2 = Convert.ToInt32(t2.Split(':')[1]);

            if (hr2 >= hr1)
            {
                if (min2 >= min1)
                {
                    i = 1;
                }
            }

            return i;
        }

但它不正确..它没有照顾所有条件......如何使它完美。或者是否有任何内置函数只使用thsi输入执行此操作(我检查但没有答案)。

提前致谢

7 个答案:

答案 0 :(得分:8)

如果你可以假设这两个字符串已经是正确的格式,只需使用:

return t1.CompareTo(t2);

毕竟,由于使用的格式,它们按字典顺序排序 - 无需解析:)

所有对TimeSpan的引用......当然如果您使用的是Noda Time,您可以使用:

private static readonly LocalTimePattern TimePattern = 
     LocalTimePattern.CreateWithInvariantInfo("HH:mm");

...

public int CompareTimes(string t1, string t2)
{
    // These will throw if the values are invalid. Use TryGetValue
    // or the Success property to check first...
    LocalTime time1 = TimePattern.Parse(t1).Value;
    LocalTime time2 = TimePattern.Parse(t2).Value;
    return time1.CompareTo(time2);
}

(如果你愿意,你可以使用TimeSpan ......但LocalTime代表你所获得的实际数据类型:一天中的时间,而不是一段时间的过去;)

答案 1 :(得分:2)

使用TimeSpan

TimeSpan s1 = TimeSpan.Parse(t1);
TimeSpan s2 = TimeSpan.Parse(t2);
return s1.CompareTo(s2);

如果您不确定输入格式是否正确,可以改用TryParse

答案 2 :(得分:0)

如果这些代表时钟时间(即小时总是小于24),那么DateTime.ParseExact就是你想要的。

否则,TimeSpan.ParseExact

答案 3 :(得分:0)

如果您可以保证所提供的时间始终为HH:mm,则可以使用TimeSpan.ParseExact

答案 4 :(得分:0)

您可以直接从字符串中解析时间。小心文化!

 var time1 = DateTime.ParseExact("12:56", "hh:mm", CultureInfo.CurrentCulture);
 var time2 = DateTime.ParseExact("11:21", "hh:mm", CultureInfo.CurrentCulture);

答案 5 :(得分:0)

其他解决方案更优雅,更简单,处理文化问题,应该在专业级代码中使用。

但是为了修复你的代码,当且仅当小时值相等时,你才需要比较分钟值。

var t1 = DateTime.Now.ToString("HH:mm"); 
   var t2 = "20:03"; 
   var res =result(t1, t2); 

   public int result(string t1, string t2) 
        { 
            int i = -1; 

            int hr1 = Convert.ToInt32(t1.Split(':')[0]); 
            int hr2 = Convert.ToInt32(t2.Split(':')[0]); 

            int min1 = Convert.ToInt32(t1.Split(':')[1]); 
            int min2 = Convert.ToInt32(t2.Split(':')[1]); 

            if (hr2 > hr1)
               i = 1;
            else if (hr2 = hr1 && min2 >= min1) 
               i = 1; 

            return i; 
        } 

答案 6 :(得分:0)

这有效

public int CompareTime(string t1, string t2)
        {

            int i = -1;

            int hr1 = Convert.ToInt32(t1.Split(':')[0]);
            int hr2 = Convert.ToInt32(t2.Split(':')[0]);

            int min1 = Convert.ToInt32(t1.Split(':')[1]);
            int min2 = Convert.ToInt32(t2.Split(':')[1]);

            if (hr2 == hr1)
            {
                if (min2 >= min1)
                {
                    i = 1;
                }
            }

            if (hr2 > hr1)
            {
                i = 1;
            }

            return i;
        }