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

ASP.NET中无法验证ISO 8601格式的Date.Now生成日期字符串

解决ASP.NET中Date.TryParseExact验证ISO 8601日期字符串的问题

嘿,我看你在用Date.TryParseExact验证那串带时区偏移的ISO日期时碰壁了,咱们来捋清楚问题出在哪,然后搞定它!

原有格式数组的几个坑

你写的格式串里有几个大小写和语法错误,这是导致匹配失败的核心原因:

  • 月份得用大写的MM,小写的mm是分钟的意思,你写的yyyy-mm-dd会把月份字段当成分钟解析,完全不对路。
  • 小时部分如果是24小时制(比如目标字符串里的11),必须用大写的HH,小写的hh是12小时制,根本匹配不上。
  • 时区偏移的格式写法错了,不能用+|-hh:mm这种语法,正确的带偏移的格式应该用zzz(对应+00:00这种格式),或者用K(兼容Z和+hh:mm两种时区标识)。
  • 毫秒位数要对应,目标字符串有7位小数,格式里得用fffffff,你之前有的格式用了nnnnnnn,虽然.NET里DateTime精度是100纳秒,但这里用fffffff就足够匹配。

修正后的格式集合

把格式数组改成下面这样,就能完美匹配你的目标日期字符串"2018-01-17T11:12:42.0544453+00:00"了:

Dim formats() As String = { 
    "yyyy-MM-dd", 
    "yyyy-MM-ddTHH:mm:ss", 
    "yyyy-MM-ddTHH:mm:ss.fff", 
    "yyyy-MM-ddTHH:mm:ss.fffffff", 
    "yyyy-MM-ddTHH:mm:ss.fffffffzzz"
}

完整验证代码示例

直接用这段代码测试就能成功解析了:

Dim dt As DateTime
Dim formats() As String = { 
    "yyyy-MM-dd", 
    "yyyy-MM-ddTHH:mm:ss", 
    "yyyy-MM-ddTHH:mm:ss.fff", 
    "yyyy-MM-ddTHH:mm:ss.fffffff", 
    "yyyy-MM-ddTHH:mm:ss.fffffffzzz"
}
If Date.TryParseExact("2018-01-17T11:12:42.0544453+00:00", formats, CultureInfo.InvariantCulture, DateTimeStyles.None, dt) Then
    ' 解析成功,这里可以处理你的DateTime对象
    Console.WriteLine($"解析成功:{dt.ToString()}")
Else
    Console.WriteLine("解析失败")
End If

额外小提示

如果你的业务场景里还会遇到带Z标识的UTC日期(比如"2018-01-17T11:12:42.0544453Z"),可以在格式数组里再加一项"yyyy-MM-ddTHH:mm:ss.fffffffZ",这样就能兼容两种时区格式啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:50:37