如何比较C#中12小时/24小时格式的时间字符串?

如何比较C#中12小时/24小时格式的时间字符串?,c#,datetime,timestamp,type-conversion,comparison-operators,C#,Datetime,Timestamp,Type Conversion,Comparison Operators,如何比较哪个时间字符串更大;是24小时制还是12小时制 例如,“9:42:54”vs“19:25:31”或“9:42:54 AM”vs“7:25:31 PM”要能够比较时间格式的字符串,您需要将它们转换为TimeSpan或DateTime对象,但前者似乎更相关: TimeSpan time1 = TimeSpan.Parse("9:42:54"); TimeSpan time2 = TimeSpan.Parse("19:25:31"); 或 但是,对12小时时间字符串格式使用TimeSpan.

如何比较哪个时间字符串更大;是24小时制还是12小时制


例如,
“9:42:54”vs“19:25:31”
“9:42:54 AM”vs“7:25:31 PM”

要能够比较时间格式的字符串,您需要将它们转换为TimeSpan或DateTime对象,但前者似乎更相关:

TimeSpan time1 = TimeSpan.Parse("9:42:54");
TimeSpan time2 = TimeSpan.Parse("19:25:31");

但是,对12小时时间字符串格式使用
TimeSpan.Parse
将引发
System.FormatException
。改为使用
DateTime.Parse
,只获取创建的
DateTime
对象的时间部分:

TimeSpan time1 = DateTime.Parse("9:42:54 AM").TimeOfDay;
TimeSpan time2 = DateTime.Parse("7:42:54 PM").TimeOfDay;
作为一项好处,转换为TimeSpan还将为您提供一个应用的机会,如常规比较、减法、加法等:

if (time1 > time2)
{
    // time1 is greater
}
else if (time1 < time2)
{
    // time2 is greater
}
else
{
    // They are equal
}
if(time1>time2)
{
//时间1更大
}
否则如果(时间1<时间2)
{
//时间2更大
}
其他的
{
//他们是平等的
}

如果需要明确指定字符串的时间格式,也可以使用。

要能够以时间格式比较字符串,需要将其转换为TimeSpan或DateTime对象,但前者似乎更相关:

TimeSpan time1 = TimeSpan.Parse("9:42:54");
TimeSpan time2 = TimeSpan.Parse("19:25:31");

但是,对12小时时间字符串格式使用
TimeSpan.Parse
将引发
System.FormatException
。改为使用
DateTime.Parse
,只获取创建的
DateTime
对象的时间部分:

TimeSpan time1 = DateTime.Parse("9:42:54 AM").TimeOfDay;
TimeSpan time2 = DateTime.Parse("7:42:54 PM").TimeOfDay;
作为一项好处,转换为TimeSpan还将为您提供一个应用的机会,如常规比较、减法、加法等:

if (time1 > time2)
{
    // time1 is greater
}
else if (time1 < time2)
{
    // time2 is greater
}
else
{
    // They are equal
}
if(time1>time2)
{
//时间1更大
}
否则如果(时间1<时间2)
{
//时间2更大
}
其他的
{
//他们是平等的
}

如果需要显式指定字符串的时间格式,也可以使用。

或将其转换为中的
LocalTime
值,该值实际上表示我们试图表示的时间-一天中的一个时间。为什么要关注时间跨度?OP显然有时间点,转换成DateTime就足够了。@JonSkeet Noda time似乎是可以在应用程序中使用第三方API的人的替代品。@HenkHolterman,请原谅我的好奇,OP代表什么?因为我们试图比较时间,所以我认为时间跨度更相关、更合适。@anario OP=原始海报-即你(在你问题的上下文中,而不是作为自我回答者)。出于兴趣,JonSkeet是(IMO卓越)节点时间库的作者之一。或者将它们转换为中的
LocalTime
值,它实际上代表了我们试图表示的一天中的一个时间。为什么要关注时间跨度?OP显然有时间点,转换成DateTime就足够了。@JonSkeet Noda time似乎是可以在应用程序中使用第三方API的人的替代品。@HenkHolterman,请原谅我的好奇,OP代表什么?因为我们试图比较时间,所以我认为时间跨度更相关、更合适。@anario OP=原始海报-即你(在你问题的上下文中,而不是作为自我回答者)。出于兴趣,JonSkeet是(IMO优秀)NodaTime库的作者之一。