You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core中用C#高效转换字符串为DateTime(兼容12/24小时制)

解决DateTime同时兼容12/24小时制解析的问题

现有代码的核心问题

  • 依赖字符串固定位置的字符判断小时格式,逻辑极度脆弱:比如24小时制的09:00会被误判为12小时制,12小时制的12:30 AM会被误判为24小时制,直接导致解析失败
  • 硬编码字符串截取长度,一旦输入格式出现微小变化(比如小时位数不同、AM/PM位置偏移)就会出错

优化实现思路

不用手动判断格式,直接利用DateTime.TryParseExact方法传入多种可能的时间格式模板,让方法自动匹配合适的格式完成解析。这种方式更健壮、高效,能覆盖绝大多数常见的时间格式场景。

优化后的代码

using System;
using System.Globalization;

class Program 
{
    private static string[] testInputs = {
        "01/26/2023 5:32 PM",   // 12小时制(1位小时)
        "01/26/2023 12:32 AM",  // 12小时制(2位小时)
        "01/26/2023 14:32",     // 24小时制(2位小时)
        "01/26/2023 9:15"       // 24小时制(1位小时)
    }; 

    static void Main(string[] args) 
    {
        foreach (var req in testInputs)
        {
            if (TryParseDateTime(req, out DateTime? expectedDate))
            {
                Console.WriteLine($"输入: {req} -> 解析结果: {expectedDate:yyyy-MM-dd HH:mm:ss}");
            }
            else
            {
                Console.WriteLine($"输入: {req} -> 解析失败");
            }
        }
    }

    private static bool TryParseDateTime(string input, out DateTime? result)
    {
        result = null;
        // 覆盖所有常见的目标格式:12小时制(1/2位小时+AM/PM)、24小时制(1/2位小时)
        string[] formats = {
            "MM/dd/yyyy h:mm tt",
            "MM/dd/yyyy hh:mm tt",
            "MM/dd/yyyy H:mm",
            "MM/dd/yyyy HH:mm"
        };

        if (DateTime.TryParseExact(
            input,
            formats,
            new CultureInfo("en-US"),
            DateTimeStyles.None,
            out DateTime parsedDate))
        {
            result = parsedDate;
            return true;
        }
        return false;
    }
}

关键说明

  • 用TryParseExact替代ParseExact,避免解析失败时抛出异常,通过返回布尔值处理结果,代码更安全
  • 定义的格式模板覆盖了12/24小时制下的所有常见情况,无需手动判断输入格式
  • 新增多输入测试,验证不同格式的解析有效性,方便后续扩展

内容的提问来源于stack exchange,提问作者Zidane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 21:41:10