gpt4 book ai didi

c# - DateTime.TryParse 成功解析了一些数字

转载 作者:行者123 更新时间:2023-12-04 12:49:26 25 4
gpt4 key购买 nike

我在将字符串解析为日期时遇到意外问题。

DateTime dt;
bool parsed = DateTime.TryParse("119.08", out dt);

运行上述代码后,parsed 为真,dt 的日期为 8/1/0119。为什么这个值会解析为日期?有一个采用 IFormatProvider 和 DateTimeStyles 的 TryParse 重载。这可以用来解决问题吗。

最佳答案

它成功解析的原因是因为 MSDN 上的这个

The string s is parsed using formatting information in the current DateTimeFormatInfo object, which is supplied implicitly by the current thread culture. This method tries to ignore unrecognized data, if possible, and fills in missing month, day, and year information with the current date. If s contains only a date and no time, this method assumes the time is 12:00 midnight. If s includes a date component with a two-digit year, it is converted to a year in the current culture's current calendar based on the value of the Calendar.TwoDigitYearMax property. Any leading, inner, or trailing white space character in s is ignored.

因此在您的情况下,由于 119 不能是月份 (1-12) 或一天 (1-31),因此它会尽力而为并假设它必须是年份。不确定为什么它决定 08 是月还是日。

您需要告诉解析方法要使用哪种文化进行解析。您可以使用 TryParseExactTryParse。以下是您将如何使用 TryParseExact:

CultureInfo enUS = new CultureInfo( "en-US" );
DateTime.TryParseExact( "119.08", "g", enUS,
DateTimeStyles.None, out dt );
// or this format
DateTime.TryParseExact( "119.08", "M/dd/yyyy hh:mm", enUS,
DateTimeStyles.None, out dt );

这里是我从 .NET FCL 源代码中提取的更多信息,用于解释解析的工作原理。第一条评论与您的​​情况有关。

DateTimeParse

关于c# - DateTime.TryParse 成功解析了一些数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41029543/

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