【问题标题】:Issue with DateTime.TryParse()DateTime.TryParse() 的问题
【发布时间】:2020-12-15 16:47:25
【问题描述】:

我有一个字符串"2/15/50" 需要转换为日期时间格式,我正在使用以下代码:

DateTime.TryParse("2/15/50", out dt);

我得到的输出是:02/15/1950 12:00:00 AM

预期的输出是:02/15/2050 12:00:00 AM

有没有办法可以实现后者。欢迎提出使用其他功能的建议。我也尝试使用Convert.ToDateTime,它返回与 TryParse 相同的输出。

【问题讨论】:

  • 我们回到千年虫了吗?
  • 如果日期比您认为的极限值更小,则结果会增加 100 年
  • secName 的值是多少?
  • @Ben 我已经编辑了那部分。它是一个包含日期值的字符串,我将其提取并转换为 DateTime。字符串中的其余内容无关紧要。
  • 如果年份比当前年份少于 10 年,它将为您提供当前(在本例中为世纪)。否则,它会回到过去。 29 年将变为 2029 年,但 30 年将变为 1930 年。

标签: c# datetime datetime-format


【解决方案1】:

这应该适合你,

CultureInfo ci = new CultureInfo("en-US");
ci.Calendar.TwoDigitYearMax = 2099;
DateTime.TryParse("2/15/50", ci, System.Globalization.DateTimeStyles.None, out DateTime dt)

这里有关于方法的文档,ParseExact 允许您指定格式等 https://docs.microsoft.com/en-us/dotnet/api/system.datetime.tryparse?view=net-5.0

这是我获得文化信息代码的地方 https://www.hanselman.com/blog/how-to-parse-string-dates-with-a-two-digit-year-and-split-on-the-right-century-in-c

【讨论】:

  • 如果你给那个方法“15/02/50”它仍然给你2/15/1950 12:00:00 AM
  • @Danny 是的,cultureinfo 是这里真正的明星,我添加了指向博客的链接,供需要更多信息的人使用。
  • 如果您要坚持使用TryParseExact,那么我认为您需要使用“M/d/yy”来处理单个数字的格式。如果输入“2/15/50”和“MM/dd/yy”,TryParseExact 将不起作用
  • @Ben 在日期为 28 年 8 月 6 日的情况下,该方法无法解析。我假设这是因为使用的格式?
  • 更新为使用 datetime.Parse @AdarshRavi 上面的代码现在应该可以工作了,把它改成 parseexact
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多