.NET中dd/mm/yyyy HH:mm:ss AM/PM转YYYY-mm-dd hh:mm:ss.fffZ失败求助
解决日期格式转换问题
嘿,我来帮你搞定这个日期格式转换的问题!你之前的尝试里有两个关键问题没处理好,导致转换失败,咱们一步步来修正:
问题出在哪?
- 你用
Convert.ToDateTime(inputDate)的时候没指定文化,默认文化可能不支持dd/MM/yyyy这种“日在前”的格式,很容易解析出错; TryParseExact的格式字符串写得不对:你的输入是12小时制带AM/PM的(1:55:11 PM),但你用了HH(24小时制),还漏掉了AM/PM的标识tt,格式完全不匹配,肯定解析失败。
正确的实现步骤
1. 匹配输入的格式字符串
你的输入格式对应正确的格式字符串是dd/MM/yyyy hh:mm:ss tt,各部分含义:
dd:两位数字的日期(比如14)MM:两位数字的月份(比如02)yyyy:四位数字的年份(比如2008)hh:12小时制的小时(1-12)mm:两位数字的分钟ss:两位数字的秒数tt:AM/PM的标识
2. 完整可运行的代码
// 指定支持dd/MM/yyyy和AM/PM格式的文化,比如en-CA或者en-US都可以 System.Globalization.CultureInfo targetCulture = new System.Globalization.CultureInfo("en-CA"); string inputDate = "14/02/2008 1:55:11 PM"; DateTime parsedDateTime; // 用TryParseExact严格匹配格式,避免解析错误 if (System.Globalization.DateTime.TryParseExact( inputDate, "dd/MM/yyyy hh:mm:ss tt", targetCulture, System.Globalization.DateTimeStyles.None, out parsedDateTime)) { // 目标格式带Z,代表UTC时间,所以要把解析后的本地时间转成UTC DateTime utcDateTime = parsedDateTime.ToUniversalTime(); // 格式化为你需要的YYYY-MM-dd hh:mm:ss.fffZ格式(注意用yyyy代替YYYY,避免周年问题) string formattedDate = utcDateTime.ToString("yyyy-MM-dd hh:mm:ss.fffZ", targetCulture); Console.WriteLine(formattedDate); // 示例输出(取决于你的本地时区):2008-02-14 07:55:11.000Z } else { Console.WriteLine("日期解析失败,请检查输入格式是否正确"); }
额外提醒
- 如果你的输入日期本身就是UTC时间,那就不用调用
ToUniversalTime(),直接格式化就行; - 格式字符串的大小写一定要注意:
MM是月份,mm是分钟;yyyy是常规年份,YYYY是周年(一般场景不推荐用); - 带Z的格式是ISO 8601的UTC时间规范,确保转换后的时间是UTC才符合这个格式的含义。
内容的提问来源于stack exchange,提问作者Amar
相关产品推荐
相关产品推荐

