DateTime.ParseExact()令人困惑

时间:2015-10-02 07:43:56

标签: c# datetime

为什么我可以将该代码应用于其他形式的.cs

string dt = day + "/" + month + "/" + year;
DateTime newDate = DateTime.ParseExact(dt, "dd/MM/yyyy", null);

它始终显示错误

  

字符串未被识别为有效的DateTime。

必须像这样改变

"dd/MM/yyyy"  -->   "d/M/yyyy"

但是在其他形式.cs中,该代码有效。不需要更改该字符串

4 个答案:

答案 0 :(得分:3)

通过指定ddMM,您需要输入宽度为2个字符。您的代码适用于10/10/2015,但不适用于1/1/2015

将您的代码更改为允许单日和月份字符,您将没事:

DateTime newDate = DateTime.ParseExact(dt, "d/M/yyyy", null);

答案 1 :(得分:0)

我认为您的变量日期和月份不包含前导0,这就是您的解析无效的原因。以下是对MSDN页面的一些引用,您可以了解有关ParseExactTime formats的更多信息

答案 2 :(得分:0)

dd/MM/yyyy需要两位数的日期和月份,如10/09/YYYY;而d/M/yyyy接受一个或数字!

了解format codes on MSDN

代码dt = day + "/" + month + "/" + year不会将前导零添加到日期和月份。

我建议使用DateTime constructor,如

 DateTime newDate = DateTime(year, month, day);

然后你就不会遇到字符串格式的任何问题。

答案 3 :(得分:0)

如果你知道日期部分,有一种简单的方法可以构建DateTime

来自英特尔的

int day = 1;
int month = 1;
int year = 2015;
DateTime newDt = new DateTime(year, month, day);
Console.WriteLine(newDt);

来自字符串:

string sday = "1";
string smonth = "1";
string syear = "2015";
DateTime newDts = new DateTime(int.Parse(syear), int.Parse(smonth), int.Parse(sday));
Console.WriteLine(newDts);

demo