gpt4 book ai didi

c# - 为什么 DateTime.ParseExact 不能解析 DateTime 输出?

转载 作者:可可西里 更新时间:2023-11-01 08:10:14 26 4
gpt4 key购买 nike

在与 DateTime.ParseExact 格式问题作斗争时,我决定将 DateTime.ToString() 的输出提供给 ParseExact,如下所示:

DateTime date2 = new DateTime(1962, 1, 27);
string[] expectedFormats = { "G", "g", "f", "F", "D", "d", "M/d/yyy", "MM/dd/yyy", "MM-dd-yyy", "MMM dd, yyy", "MMM dd yyy", "MMMM dd, yyy", "MMMM dd yyy" };
bool parsed = false;

foreach (string fmt in expectedFormats)
{
try
{
DateTime dtDateTime = DateTime.ParseExact(date2.ToString(fmt), fmt, new CultureInfo("en-US"));
parsed = true;
}
catch (Exception)
{
parsed = false;
}

Console.WriteLine("[{0}] {1}", parsed,date2.ToString(fmt));
}

这是输出:

[True] 1/27/1962 12:00:00 AM
[True] 1/27/1962 12:00 AM
[True] Saturday, January 27, 1962 12:00 AM
[True] Saturday, January 27, 1962 12:00:00 AM
[True] Saturday, January 27, 1962
[True] 1/27/1962
[False] 1/27/1962
[False] 01/27/1962
[False] 01-27-1962
[False] Jan 27, 1962
[False] Jan 27 1962
[False] January 27, 1962
[False] January 27 1962

我必须做什么才能使 ParseExact 解析自定义格式字符串?我是否错误地期望 DateTime 能够基于相同的格式字符串摄取它自己的输出?

最佳答案

这清楚地表明 DateTime.ParseExact 对于 Datetime.ToString 不是往返安全的。我不确定这是一个很好的答案,但问题肯定与 3 位数年份格式 yyy 有关。由于 1962 不能用 3 位数字表示 ToString 被迫使用 4 位数字。显然 ParseExact 不够聪明,无法反转该逻辑,而是正在寻找恰好 3 位数字。解决方法是使用 yyyy 而不是 yyy。我会将其作为错误提交给 Microsoft Connect网站,看看结果如何。

关于c# - 为什么 DateTime.ParseExact 不能解析 DateTime 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3321432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com