DateTime.TryParse 如何知道日期格式?

ant*_*ton 5 .net c# datetime parsing date

这是一个场景。

  • 您有一个代表日期的字符串,即“2016 年 1 月 25 日 10:10 AM”。
  • 您想知道它是否代表特定文化中的日期。
  • 您想知道什么日期时间模式满足此日期字符串。

例子:

  • 日期字符串为“2016 年 1 月 25 日 10:10 AM”
  • 文化是 en-US
  • 可能的格式可能是“MMM dd yyyy HH:mm tt”

执行:

  • 要获取所有日期时间模式的列表,您可以获取CultureInfo.DateTimeFormat.GetAllDateTimePatterns()
  • DateTime.TryParseExact(dateString, pattern, culture, DateTimeStyles.None, out resultingDate)然后尝试上面每个模式的重载版本,看看它是否可以解析日期。
  • 这应该会给你所需的日期时间模式。

然而,如果我们迭代所有这些模式,它将找不到任何匹配项!

DateTime.TryParse(dateString, culture, DateTimeStyles.None, out resultingDate)如果您尝试使用 a并且它确实解析了正确的日期,那就更奇怪了!

所以问题是,DateTime.TryParse当此信息不属于日期字符串的一部分时,如何知道日期字符串的模式CultureInfo以及如何在文化中获取此信息?

谢谢!

Son*_*nül 2

我同意 xanatos 的观点,对此没有完美的解决方案,并且您不能假设每种格式GetAllDateTimePatterns返回都可以使用ParseTryParse方法完美解析。

\n\n

DateTimeFormatInfo.GetAllDateTimePatterns;

\n\n
\n

您可以在格式化操作中使用 \n 方法返回的数组中的自定义格式字符串 GetAllDateTimePatterns。但是,如果您这样做,则格式化操作中返回的日期和时间值的字符串表示形式并不总是能够被 ParseTryParse方法成功解析。因此,您不能假设GetAllDateTimePatterns方法返回的自定义格式字符串可用于往返日期和时间值。

\n
\n\n

如果您看到页面上的Remarks部分,则只有 42 种格式可以通过TryParse方法进行解析,例如,该GetAllDateTimePatterns方法为区域性返回96 种格式。7it-IT

\n\n

塔里克·马哈茂德·赛义德回应说:

\n\n
\n

Parse/TryParse 被实现为有限状态机,因此它在解析中并没有\xe2\x80\x99t\n 真正使用日期模式。它只是将解析的字符串拆分为标记,并尝试查找标记是否与日期的特定部分匹配(例如月、日、星期几\xe2\x80\xa6 等)。另一方面,ParseExact/TryParseExact 将仅根据传递的格式模式解析字符串。

\n
\n