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

使用DateTime.ParseExact转换日期遇System.ArgumentNullException,求排查

问题分析与解决方法

嘿,这个问题我熟!你踩了ParseExact最常见的坑——把输入格式和输出格式搞混啦😅

错误根源

你写的代码里,ParseExact的第二个参数是"dddd MMMM yyyy",这个格式代表的是「星期全称 + 月份全称 + 年份」(比如意大利语的lunedì gennaio 2018),但你要解析的输入字符串却是"2018/01/01"(数字格式的年/月/日)。两者完全不匹配,程序根本无法识别这个字符串是有效的日期,所以抛出了异常。

ParseExact的核心逻辑是:用第二个参数定义的格式,去匹配第一个参数的输入字符串,而不是用来指定最终输出的格式。你想用它避免错误的思路是对的,但参数的作用搞反了。

修正后的代码

根据你的需求(把2018/01/01转换成当前系统语言的日期格式),正确的步骤应该是:

  1. 先用ParseExact按照输入字符串的格式(yyyy/MM/dd)解析出DateTime对象;
  2. 再用ToString结合系统当前文化,转换成你想要的本地化格式。

示例代码:

// 第一步:正确解析输入的数字格式日期
DateTime parsedDate = DateTime.ParseExact("2018/01/01", "yyyy/MM/dd", System.Globalization.CultureInfo.InvariantCulture);
// 第二步:转换成当前系统语言的日期格式
string systemFormattedDate = parsedDate.ToString(System.Globalization.CultureInfo.CurrentCulture);

额外说明

  • 用InvariantCulture解析是因为输入的是纯数字日期,不依赖特定地区的格式规则,解析更稳定;
  • 如果你本来想解析意大利语的文本格式日期(比如"lunedì gennaio 2018"),那才需要用"dddd MMMM yyyy"作为格式参数,搭配it-IT文化:
    DateTime italianDate = DateTime.ParseExact("lunedì gennaio 2018", "dddd MMMM yyyy", new System.Globalization.CultureInfo("it-IT"));
    string systemFormattedDate = italianDate.ToString(System.Globalization.CultureInfo.CurrentCulture);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:42:15