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

DateTime.TryParseExact无法识别字符串中的中文上午/下午标识

为啥TryParseExact解析带中文上午/下午的日期会失败?

我太懂这个坑了!DateTime.TryParse能成功是因为它会“灵活”适配系统的本地化设置,自动识别中文的“上午/下午”;但TryParseExact是个“死心眼”,必须严格匹配你指定的格式和对应的文化信息,稍微不对就直接返回默认值。

你大概率是在调用TryParseExact的时候用了默认的InvariantCulture(对应英文的AM/PM),但你的日期字符串里是中文的“下午”,这俩完全不搭,自然解析失败。

怎么解决?

很简单,给TryParseExact指定中文(中国)的文化信息,同时确保格式字符串里用tt对应中文的上午/下午标识就行。

给你写个能跑的示例代码:

using System;
using System.Globalization;

class DateParseTest
{
    static void Main()
    {
        string targetDate = "2/9/2018 3:55:17 下午";
        
        // TryParse自动识别本地化,成功解析
        DateTime parsedDate;
        DateTime.TryParse(targetDate, out parsedDate);
        Console.WriteLine($"Date: {parsedDate}");
        
        // TryParseExact指定中文文化,严格匹配格式
        DateTime exactParsedDate;
        bool isSuccess = DateTime.TryParseExact(
            targetDate,
            "M/d/yyyy h:mm:ss tt",
            CultureInfo.GetCultureInfo("zh-CN"),
            DateTimeStyles.None,
            out exactParsedDate
        );
        
        Console.WriteLine($"DateExact: {exactParsedDate}");
    }
}

运行这段代码后,DateExact就会输出正确的日期时间,而不是默认的1/1/0001 12:00:00 AM了。

额外小提示
  • 如果你的日期字符串格式可能有变体(比如有时候是02/09带前导零,有时候是2/9),可以给TryParseExact传一个格式数组,比如new string[] { "M/d/yyyy h:mm:ss tt", "MM/dd/yyyy hh:mm:ss tt" },这样就能兼容多种格式了。
  • 格式字符串一定要和目标字符串完全对应,比如日期部分是2/9就用M/d,别用MM/dd,不然也会匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:27:55