字符串未被识别为DateTime.ParseExact上的有效DateTime

时间:2014-12-17 10:20:17

标签: c# string datetime

我知道这里有很多关于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;

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

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

BANG!

我们完全有DateTime。但是如果我们的字符串不是en-US文化的标准日期和时间格式呢?然后我们可以使用DateTime.TryParseExact method指定格式。让我们看一下我们可以用来解析字符串的格式。

  • 1与来自112的{​​{3}}匹配,而单位数月份的格式为,而为前导零。
  • /"M" custom format specifier,我们可以在格式中使用它,因为en-US文化已经/作为DateSeparator。请记住,DateSeparator具有使用当前文化或提供的文化日期分隔符替换我的特殊含义
  • 22与来自0131的{​​{3}}匹配,而单位数字日的格式为为前导零。 记住,在这种情况下你也可以使用d格式说明符,但建议使用更宽的格式。
  • 2004"/" custom format specifier匹配,代表四位数的年份。

因此,正确格式的结果为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
}

答案 2 :(得分:0)

你指的是错误的格式,所以很明显会抛出异常。以下是你正在做的事情

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");

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