[英]String was not recognized as a valid DateTime on DateTime.ParseExact
我知道这里有很多有关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"
因为datestring成为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 ie, MM/dd/yyyy
在代码中,您指的是
return DateTime.ParseExact(partialDate + dtfi.DateSeparator + _baseDate.ToString(), "dd/MM/yyyy", new CultureInfo("en-us");
尝试使用正确的格式,以获得正确的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.