.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("无法解析输入的日期字符串"); } } }
关键说明
CultureInfo.InvariantCulture的作用:它是与文化无关的格式标准,日期顺序固定为月/日/年,分隔符/为默认日期分隔符,能正确解析美式M/dd/yyyy或MM/dd/yyyy格式。- 字面量分隔符处理:格式字符串中的
-会被当作字面量直接匹配输入中的-,无需额外转义,因此MM-dd-yyyy hh:mm格式可以正常解析。 - 格式化输出:通过
ToString("dd/MM/yyyy")将解析后的DateTime对象转换为日/月/年格式的字符串,满足输出要求。
内容的提问来源于stack exchange,提问作者Lajith
相关产品推荐
相关产品推荐

