mol*_*iso 1 .net c# datetime parsing
我有这行简单的代码:
DateTime.ParseExact("Mon 7:00 PM", "ddd h:mm tt", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
如果您在一周 6 天中运行此代码,它将抛出此异常:
System.FormatException: String was not recognized as a valid DateTime because the day of week was incorrect.
Run Code Online (Sandbox Code Playgroud)
如果您在星期一运行它,它将运行正常。有没有办法正确解析该字符串?
不幸的是,DateTime.Parse(Exact) 将始终返回一个完整的 DateTime,并带有一个日期。
如果您省略任何详细说明日期的部分,它将默认为今天的日期。每周 7 天中有 6 天与星期一的模式不匹配,这就是您得到该例外的原因。
ParseExact 不会尝试查找匹配的 DateTime 值。
例如,如果你运行这个:
ParseExact("Mon 30.03", "ddd dd.MM", culture)
Run Code Online (Sandbox Code Playgroud)
它将在今年起作用,因为 2020 年 3 月 30 日是星期一。但是,在 2021 年,3 月 30 日将是星期二,因此它将再次失败。ParseExact 不会尝试找到一个匹配的年份,该年份的星期一为 3 月 30 日,这与仅指定星期一是一样的。它不会试图弄清楚您在谈论哪个星期一。
简而言之,您需要找到一种不同的方法来做到这一点。
我想您应该从 ParseExact 退一步,问问自己,“Mon 30.03”究竟应该如何翻译成特定年份的特定日期。这是什么逻辑。然后,您可以尝试找到要调用的正确方法,或者最有可能的是,编写代码来执行此操作。