奇怪的 DateTime 转换行为

Strange DateTime conversion behaviour

提问人:user1006221 提问时间:10/28/2023 更新时间:11/15/2023 访问量:55

问:

我有一个大的 csv 文件,每行都有一个日期和一个分钟条目;

20000530,172700

这两个字符串应该代表 2000 年 5 月 30 日 17:27

C# 不会将其转换为顶部的 DateTime,因此我尝试使用自定义模式

string datePattern = "yyyymmdd";
DateTime.TryParseExact(d, datePattern, null, DateTimeStyles.AssumeLocal, out dateTest);

string timePattern = "hhmmss";
DateTime.TryParseExact(t, timePattern, null, DateTimeStyles.AssumeLocal, out timeTest);

虽然 C# 理论上将这些对象转换为 DateTime 对象,但它实际上不起作用。

timeTest 对象中的时间几乎总是 00:00,直到它随机决定它不是 00:00。

dateTest 递增日期而不是月份,它始终是 1 月(每个文件都是它自己的年份,所以我不知道它是否会正确递增年份)。

有人可以解释我做错了什么吗?

谢谢。

C# 日期时间

评论

6赞 eekinci 10/28/2023
yyyyMMddinstead of 和 instead of - 自定义日期和时间格式字符串yyyymmddHHmmsshhmmss
0赞 user1006221 10/29/2023
谢谢,从 MS 网站复制了如何做到这一点,但我认为他们没有提到大写位。
0赞 eekinci 10/29/2023
hh小时,使用从 01 到 12 的 12 小时制 “hh”自定义格式说明符 - 小时,使用从 00 到 23 的 24 小时制 “HH”自定义格式说明符 HH

答:

1赞 Garry 11/15/2023 #1

Capital MM 和 HH 解决了您的问题

string dateString = "20000530,172700";

  if (DateTime.TryParseExact(dateString, "yyyyMMdd,HHmmss", null, DateTimeStyles.AssumeLocal, out DateTime result))
  {
      Console.WriteLine("Parsed DateTime: " + result);
  }
  else
  {
      Console.WriteLine("Failed to parse the DateTime.");
  }

您可以根据需要分解生成的 datetime 对象