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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:21:16