我正在尝试将string
转换为DateTime
。但我无法转换。
DateTime dt = DateTime.Parse("16/11/2014", CultureInfo.InvariantCulture);
Console.WriteLine("Date==> " + dt);
错误为FormatException
。
我的输入时间格式为"dd/MM/yyyy"
。
请让我解决我的问题。
答案 0 :(得分:2)
由于InvariantCulture
没有dd/MM/yyyy
作为标准日期和时间格式,但它有MM/dd/yyyy
作为标准日期和时间格式。
这就是为什么它认为你的字符串是MM/dd/yyyy
格式,但由于没有16
as a month in Gregorian calender,你得到FormatException
。
您可以使用DateTime.TryParseExact
方法指定完全格式,而不是那样;
string s = "16/11/2014";
DateTime dt;
if(DateTime.TryParseExact(s, "dd/MM/yyyy", CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
}
答案 1 :(得分:2)
鉴于您知道输入格式,您应该使用`ParseExact:
指定它DateTime dt = DateTime.ParseExact(text, "dd/MM/yyyy",
CultureInfo.InvariantCulture);
我总是建议尽可能明确地说明日期/时间格式。它使你的意图非常清楚,并避免了以错误的方式获得数月和数日的可能性。
正如Soner所说,CultureInfo.InvariantCulture
使用MM/dd/yyyy
作为其短日期模式,您可以通过以下方式验证:
Console.WriteLine(CultureInfo.InvariantCulture.DateTimeFormat.ShortDatePattern)
作为一个温和的插件,你可能想考虑使用我的Noda Time项目进行日期/时间处理 - 除了其他任何东西,它允许你将日期视为日期而不是作为日期和时间...