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

.NET Framework多格式日期字符串转DateTime失败问题求助

问题解决:日期字符串转DateTime并格式化

问题根源

原代码使用en-GB文化,该文化默认日期顺序为日/月/年,当解析07/30/2022这类月/日/年格式的字符串时,会错误地将07识别为日、30识别为月(30不是合法月份),导致解析失败。

解决方案

改用CultureInfo.InvariantCulture解析,它的默认日期顺序为月/日/年,完美匹配带/的输入格式;同时格式字符串中的-会被当作字面量匹配输入分隔符,确保带-的格式也能正常解析。解析完成后,再将DateTime对象格式化为日/月/年的字符串即可得到期望输出。

修正后的代码

using System;
using System.Globalization;

class DateConverter
{
    static DateTime ConvertDateString()
    {
        // 切换注释测试不同输入场景
        string dt = "07/30/2022 5:30:39 PM";
        // string dt = "7/30/2022 5:30:39 PM";
        // string dt = "11-07-2022 09:22";

        DateTime dateValue;
        string[] formatStrings = { 
            "M/dd/yyyy hh:mm:ss tt", 
            "MM/dd/yyyy hh:mm:ss tt", 
            "MM-dd-yyyy hh:mm" 
        };

        // 使用InvariantCulture解析所有格式
        if (DateTime.TryParseExact(dt, formatStrings, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue))
        {
            // 格式化为期望的日/月/年字符串
            string formattedDate = dateValue.ToString("dd/MM/yyyy");
            Console.WriteLine(formattedDate); // 输出对应结果:30/07/2022、30/07/2022、07/11/2022
            return dateValue;
        }
        else
        {
            throw new FormatException("无法解析输入的日期字符串");
        }
    }
}

关键说明

  1. CultureInfo.InvariantCulture的作用:它是与文化无关的格式标准,日期顺序固定为月/日/年,分隔符/为默认日期分隔符,能正确解析美式M/dd/yyyy或MM/dd/yyyy格式。
  2. 字面量分隔符处理:格式字符串中的-会被当作字面量直接匹配输入中的-,无需额外转义,因此MM-dd-yyyy hh:mm格式可以正常解析。
  3. 格式化输出:通过ToString("dd/MM/yyyy")将解析后的DateTime对象转换为日/月/年格式的字符串,满足输出要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:45:49