C#如何解析日期时间字符串「Mar 25 2014 10:15:58:757AM」?尝试后未成功
解决C#中解析「Mar 25 2014 10:15:58:757AM」日期字符串的方案
嘿,这个问题我熟!你之所以解析失败,核心原因是这个日期字符串里的毫秒部分用冒号分隔(而不是C#默认的点号),而且是固定格式的日期,直接用DateTime.Parse这类通用方法大概率会踩坑,得用精准匹配的方法才行。
下面给你两个可靠的解决方案,都能完美适配你给出的日期格式:
方法一:使用DateTime.TryParseExact(推荐,更安全)
这个方法不会因为格式不匹配抛出异常,适合不确定输入是否绝对符合格式的场景,代码示例如下:
using System; using System.Globalization; class Program { static void Main() { string targetDateStr = "Mar 25 2014 10:15:58:757AM"; // 自定义格式字符串,完全匹配你的日期结构 string format = "MMM dd yyyy hh:mm:ss:ffftt"; DateTime parsedDateTime; // 用InvariantCulture确保英文月份缩写能被正确识别,不受系统区域影响 if (DateTime.TryParseExact(targetDateStr, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDateTime)) { Console.WriteLine($"解析成功!结果:{parsedDateTime}"); // 如果你需要单独获取毫秒,可以这样: Console.WriteLine($"毫秒部分:{parsedDateTime.Millisecond}"); } else { Console.WriteLine("解析失败,请检查输入日期的格式是否正确"); } } }
方法二:使用DateTime.ParseExact(适合确定格式绝对正确的场景)
如果能保证输入的日期字符串格式完全固定,也可以用这个方法,不过格式不匹配时会抛出FormatException,需要用try-catch捕获:
using System; using System.Globalization; class Program { static void Main() { string targetDateStr = "Mar 25 2014 10:15:58:757AM"; string format = "MMM dd yyyy hh:mm:ss:ffftt"; try { DateTime parsedDateTime = DateTime.ParseExact(targetDateStr, format, CultureInfo.InvariantCulture); Console.WriteLine($"解析成功!结果:{parsedDateTime}"); } catch (FormatException) { Console.WriteLine("日期格式不匹配,解析失败"); } } }
关键格式符说明
这里给你拆解一下自定义格式字符串"MMM dd yyyy hh:mm:ss:ffftt"的每个部分:
MMM:匹配英文月份缩写(比如Mar、Jan)dd:匹配两位数字的日期(比如25、03),如果要兼容一位日期(比如5)可以改成dyyyy:匹配四位数字的年份(比如2014)hh:匹配12小时制的小时数(因为你的日期有AM标记),如果是24小时制就用HHmm:匹配两位数字的分钟ss:匹配两位数字的秒fff:匹配三位数字的毫秒(对应你字符串里的757)tt:匹配AM/PM标记
重要注意事项
一定要指定CultureInfo.InvariantCulture!如果你的系统区域不是英文,默认的文化可能无法识别Mar这类英文月份缩写,用InvariantCulture可以强制使用英文的日期格式规则,避免解析失败。
内容的提问来源于stack exchange,提问作者SatheeshN
相关产品推荐
相关产品推荐

