【问题标题】:How to compare 12-hour/24-hour formatted time strings in C#?如何在 C# 中比较 12 小时/24 小时格式的时间字符串?
【发布时间】:2013-11-03 09:23:22
【问题描述】:

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

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

【问题讨论】:

    标签: c# datetime timestamp type-conversion comparison-operators


    【解决方案1】:

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

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

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

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

    TimeSpan time1 = DateTime.Parse("9:42:54 AM").TimeOfDay;
    TimeSpan time2 = DateTime.Parse("7:42:54 PM").TimeOfDay;
    

    作为一个好处,转换为 TimeSpan 还可以让您有机会申请 TimeSpan operators,如常规比较、减法、加法等:

    if (time1 > time2)
    {
        // time1 is greater
    }
    else if (time1 < time2)
    {
        // time2 is greater
    }
    else
    {
        // They are equal
    }
    

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

    【讨论】:

    • 或将它们转换为Noda Time 中的LocalTime 值,它实际上代表了我们试图代表的内容——一天中的某个时间。
    • 为什么要关注TimeSpan? OP 显然有时间点,转换为 DateTime 就足够了。
    • @JonSkeet Noda Time 似乎是可以在应用程序中使用第三方 API 的人的替代方案。
    • @HenkHolterman,请原谅我的好奇心,OP 代表什么?由于我们试图比较时间,我认为 TimeSpan 会更相关和合适。
    • @anario OP = 原始海报 - 即您(在您的问题范围内,而不是作为自我回答者)。出于兴趣,JonSkeet 是(IMO 优秀的)NodaTime 库的作者之一。
    猜你喜欢
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多