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

时间:2018-01-17 11:55:45

标签: .net vb.net date datetime iso8601

在asp.net Date.Now中生成一个完整的日期字符串: 例如"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

1 个答案:

答案 0 :(得分:1)

  

我想确保日期是有效的ISO 8601日期格式。这可以   即使省略时间/分数/时区也是如此。

您可以使用"O"(Round-trip) format specifier

Dim time = "2018-01-17T11:12:42.0544453+00:00"
Dim validDate = Date.TryParseExact(time, "O", CultureInfo.InvariantCulture, DateTimeStyles.None, dt)
  

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

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

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