字符串在 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;
您应该使用格式"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"
自定义格式说明符匹配,该说明符从1
到12
个位数月份的格式没有前导零。 -
/
是一种DateSeparator
,我们可以在我们的格式中使用它en-US
因为文化已经/
为一种DateSeparator
。请记住,"/"
自定义格式说明符具有特殊含义,可将我替换为当前区域性或提供的区域性日期分隔符 -
22
与"dd"
自定义格式字符串匹配,该字符串从01
到31
,个位数的天数使用前导零进行格式化。请记住,在这种情况下也可以使用 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");
尝试使用正确的格式,以获得正确的结果。