.net 无法验证ISO 8601日期格式的日期字符串

.net 无法验证ISO 8601日期格式的日期字符串,.net,vb.net,date,datetime,iso8601,.net,Vb.net,Date,Datetime,Iso8601,在asp.net中Date.Now生成一个完整的日期字符串: e、 g“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.ffffff", "yyyy-mm-ddT

在asp.net中
Date.Now
生成一个完整的日期字符串: e、 g
“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.ffffff",
  "yyyy-mm-ddThh:mm:ss.fffffffZ",
  "yyyy-mm-ddThh:mm:ss.nnnnnnn",
  "yyyy-mm-ddThh:mm:ss.nnnnnnnZ",
  "yyyy-mm-ddThh:mm:ss.nnnnnnn+|-hh:mm"
}
If Date.TryParseExact("2018-01-17T11:12:42.0544453+00:00", formats, CultureInfo.InvariantCulture, DateTimeStyles.None, dt) Then
  //Success
End If
我想确保日期是有效的ISO 8601日期格式。这可能是 即使省略了时间/分数/时区,也为true

你可以使用

“O”或“O”标准格式说明符表示自定义日期和 使用保留时区模式的时间格式字符串 信息并发出符合ISO 8601的结果字符串。对于
DateTime
值,此格式说明符用于保留日期 和时间值以及文本中的
DateTime.Kind
属性

旁注:对于我来说,
Date.Now.ToString
不会以这种格式返回字符串。也许你用过:

Dim time = Date.UtcNow.ToString("o", System.Globalization.CultureInfo.InvariantCulture)

即使是
Date.TryParse
也会成功,不需要使用
ParseExact
@TimSchmelter我使用Parse exact是因为检查了许多不同的字符串,这只是一个失败的例子,我很好奇为什么。如果你检查它是否有效,那么
TryParse
就足够了。如果要确保它符合给定的格式,则只需要
TryParseExact
。你的目标是什么?@TimSchmelter我想确保日期是有效的ISO 8601日期格式。即使省略了时间/分数/时区,这也可能是真的。可能重复感谢此Tim。这只会验证时区是否存在,还是比显式格式更宽容?它需要一个额外的格式字符串,还是像上面提到的那样包含多个格式字符串?@Obsidian:它还成功解析了
“2018-01-17T11:12:42.0544453”
。但是请阅读我链接的文档。特别是“利用ISO 8601表示时区信息的三种方式:…”中的部分,在第三点中还提到,如果“日期和时间值没有时区信息”,它将解析它,这就是神奇之处。非常感谢。我意识到
o
,有点尴尬,我没有尝试。我不得不陷入困境,因为
s
z
。遗憾的是,对于所有ISO格式,没有一个通用的验证器。
Dim time = Date.UtcNow.ToString("o", System.Globalization.CultureInfo.InvariantCulture)