字符串在 DateTime.ParseExact(日期时间)上未被识别为有效的日期时间

本文关键字:日期 时间 识别 有效 DateTime ParseExact 字符串 | 更新日期: 2023-09-27 18:34:24

我知道这里有很多关于DateTime的问题,但我已经看到了它们,似乎没有为我的情况找到正确的解决方案。

这是我的代码:

return DateTime.ParseExact(partialDate + dtfi.DateSeparator + _baseDate.ToString(), "dd/MM/yyyy", new CultureInfo("en-us");

这给我带来了一个例外。

以下是变量的值:

string partialDate = "1/22";
string dtfi.DateSeparator = "/";
int _baseDate = 2004;

字符串在 DateTime.ParseExact(日期时间)上未被识别为有效的日期时间

您应该使用格式"m/dd/yyyy"因为日期字符串变得1/22/2004

return DateTime.ParseExact(partialDate + dtfi.DateSeparator + _baseDate.ToString(), "m/dd/yyyy", new CultureInfo("en-us"));

不幸的是,这两个答案都是错误的。

因此,我们都同意您的结果字符串将"1/22/2004"。在查看哪些格式与您的字符完全匹配之前,让我们先看看您的字符串是否是en-US区域性的标准日期和时间格式。

DateTime.Parse("1/22/2004",
               CultureInfo.GetCultureInfo("en-US")) // 22 January 2004 00:00:00

砰!

我们有一个完美的DateTime。但是,如果我们的字符串不是en-US区域性的标准日期和时间格式呢?然后我们可以用DateTime.TryParseExact方法指定我们的格式。让我们看看可以使用哪些格式来解析字符串。

  • 1"M"自定义格式说明符匹配,该说明符从 112 个位数月份的格式没有前导零。
  • /是一种DateSeparator,我们可以在我们的格式中使用它en-US因为文化已经/为一种DateSeparator。请记住,"/"自定义格式说明符具有特殊含义,可将我替换为当前区域性或提供的区域性日期分隔符
  • 22"dd"自定义格式字符串匹配,该字符串从 0131,个位数的天数使用前导零进行格式化。请记住,在这种情况下也可以使用 d 格式说明符,但建议使用更宽的格式。
  • 2004"yyyy"自定义格式说明符匹配,该说明符用四位数表示年份。

因此,正确的格式将在结果中M/dd/yyyy

string s = "1/22/2004";
DateTime dt;
if(DateTime.TryParseExact(s, "M/dd/yyyy", CultureInfo.GetCultureInfo("en-US"),
                          DateTimeStyles.None, out dt))
{
    Console.WriteLine(dt); // 22 January 2004 00:00:00
}

您指的是错误的格式,因此显然它会引发异常。 以下是您正在做的事情

string partialDate = "1/22";
string dtfi.DateSeparator = "/";
int _baseDate = 2004;
string ex = partialDate + dtfi.DateSeparator + _baseDate.ToString();

这给你1/22/2014 i.e., MM/dd/yyyy

在你引用的代码中

return DateTime.ParseExact(partialDate + dtfi.DateSeparator + _baseDate.ToString(), "dd/MM/yyyy", new CultureInfo("en-us");

尝试使用正确的格式,以获得正确的结果。