如何在c#中比较HH:MM
本文关键字:HH MM 比较 | 更新日期: 2023-09-27 18:11:48
你好,我要比较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;
}
但这是不正确的…它没有照顾到所有的条件。如何使它完美。或者是否有任何内置的函数可以仅使用此输入(我检查了但没有答案)。
Thanks in advance
如果您可以假设这两个字符串已经是正确的格式,只需使用:
return t1.CompareTo(t2);
毕竟,它们是根据使用的格式按字典顺序排序的——不需要解析:)
所有关于TimeSpan
的引用…当然,如果你使用野田时间,你可以使用:
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
代表实际类型的数据,你已经得到:一天的时间,而不是时间的数量通过;)
使用TimeSpan:
TimeSpan s1 = TimeSpan.Parse(t1);
TimeSpan s2 = TimeSpan.Parse(t2);
return s1.CompareTo(s2);
如果您不确定输入的格式是否正确,您可以使用TryParse来代替。
如果这些表示时钟时间(即小时总是小于24),那么DateTime.ParseExact
是您想要的。
否则,TimeSpan.ParseExact
如果您可以保证提供的时间始终是HH:mm,则可以使用TimeSpan.ParseExact
。
您可以直接从字符串解析时间。注意文化!
var time1 = DateTime.ParseExact("12:56", "hh:mm", CultureInfo.CurrentCulture);
var time2 = DateTime.ParseExact("11:21", "hh:mm", CultureInfo.CurrentCulture);
其他解决方案更优雅和简单,处理文化问题,应该在专业级别的代码中使用。
但是要修改代码,您只需要在且仅当小时值相等时比较分钟值。
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;
}
可以了
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;
}