我知道这里有很多关于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;
答案 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
我们完全有DateTime
。但是如果我们的字符串不是en-US
文化的标准日期和时间格式呢?然后我们可以使用DateTime.TryParseExact
method指定格式。让我们看一下我们可以用来解析字符串的格式。
1
与来自1
至12
的{{3}}匹配,而单位数月份的格式为,而为前导零。/
是"M"
custom format specifier,我们可以在格式中使用它,因为en-US
文化已经/
作为DateSeparator
。请记住,DateSeparator
具有使用当前文化或提供的文化日期分隔符替换我的特殊含义 22
与来自01
到31
的{{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");
尝试使用正确的格式,以获得正确的结果。