继续获取 DateTime.ParseExact 上的 FormatException

Keep getting FormatException on DateTime.ParseExact

提问人:Luis Eduardo 提问时间:5/12/2023 更新时间:5/12/2023 访问量:53

问:

我正在尝试使用如下所示将存储为字符串的日期转换为 DateTimeDateTime.ParseExact

var myDate = DateTime.ParseExact("3/14/2023 4:08:30 PM", "M/dd/yyyy h:mm:ss tt", null);

但我在那行上不断收到错误。FormatException

我尝试调整格式,但没有任何效果。我在这里错过了什么?

C# 字符串 datetime

评论

1赞 Jon Skeet 5/12/2023
你处于什么文化中?不同的区域性具有不同的日期和时间分隔符。如果可能的话,我建议你使用不变文化,或者引用分隔符。(培养也会影响 AM/PM 指示符。
0赞 Luis Eduardo 5/12/2023
@JonSkeet 太好了,使用不变文化奏效了!谢谢,请将其作为答案发布,以便我接受它。PS:我是你作品的忠实粉丝,并且有你的书关于C#。很荣幸有你帮助我,真的哈哈
0赞 Alexei Levenkov 5/12/2023
“很荣幸你能帮助我”——但你完全忽略了@JonSkeet问的问题——问题是(现在仍然是)缺少关于“你处于什么文化中”的信息......(显然,真正的答案是使用与数据或ISO8601格式相匹配的文化——Jon 的建议只是为了让你畅通无阻——但如果他决定发布一个,他肯定会在真正的答案中提供这一点)。
0赞 Luis Eduardo 5/12/2023
@AlexeiLevenkov真的,忘了回答他。我的文化是PT-BR。

答:

2赞 Jon Skeet 5/12/2023 #1

现有代码使用当前正在执行的线程中的默认区域性。即使您指定了自定义日期/时间格式字符串,区域性仍会影响它:

  • 它会影响数字的解析方式(因为并非每个文化都使用“0”-“9”)
  • 它会影响在哪个日历系统中解释该值
  • 它会影响日期分隔符(年、月和日之间)
  • 它会影响时间分隔符(在小时、月份和分钟之间)
  • 它会影响用于 AM 和 PM 的字符串

除非文本来自用户,否则通常最好显式指定要分析的区域性 - 此时您确切地知道(或可以知道)上述每个变体将使用什么。CultureInfo.InvariantCulture