我正在尝试解析DateTime string '28/3/2014
使用方法:
DateTime d;
DateTime.TryParseExact("28/3/2014", "dd'/'MM'/'yyyy",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out d);
它总是返回我0001:01:01
。
你能告诉我如何设置转换参数吗?我尝试设置
System.Globalization.CultureInfo.CurrentCulture
System.Globalization.DateTimeStyles.AssumeLocal
没有效果
以 28/3/2014
为例。Date也可以是28/12/2014
哈姆雷特的回答是正确的。但我至少想补充一些解释。
让我们一步一步地分析你的问题:
你说你的字符串是'28/3/2014
,但你在你的例子中使用28/3/2014
。我认为,28/3/2014
是正确的字符串为您的情况。
真正的代码是;
DateTime d;
DateTime.TryParseExact("28/3/2014", "dd'/'MM'/'yyyy",
CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out d);
在这种情况下,您不需要为/
分隔符使用'
,但这不会破坏您的代码。因为'
是一个字面值字符串分隔符,它在这种情况下仍然有效。
但是MM
说明符是针对01
到12
的,这不适用于月份值3
。您应该使用M
说明符,它用于1
到12
。
它总是返回我0001:01:01
因为你的TryParseExact
返回false
(因为你的格式不适合你的字符串),从它的文档;
结果类型:系统。DateTime
当此方法返回时,包含相当于的DateTime值s中包含的日期和时间,如果转换成功,或.
0001:01:01
等于DateTime.MinValue
字段(其他部分也…)这就是为什么你得到这个值。
DateTime d;
DateTime.TryParseExact("28/3/2014", "dd/M/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out d);
如果您希望28/3/2014
作为string
(DateTime
没有格式)的结果,您有几个选项;
DateSeperator
是/和ShortDatePattern
是dd/m/yyyy
,你不需要使用任何东西。只是,Console.WriteLine(d); //This will be enough.
如果不是,可以使用DateTime.ToString(String, IFormatProvider)
和InvariantCulture
,如;
Console.WriteLine(d.ToString("dd/M/yyyy", CultureInfo.InvariantCulture));
或者无论使用哪种文化都可以转义/
,例如;
Console.WriteLine(d.ToString("dd'/'M'/'yyyy"));
或
Console.WriteLine(d.ToString(@"dd/M/yyyy"));
你的样式必须是
"dd'/'M'/'yyyy"
请参阅文章自定义日期和时间格式字符串了解更多信息。
您的输入字符串month没有前导0,所以您可以试试:
DateTime d;
DateTime.TryParseExact("28/03/2014", "dd/MM/yyyy",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out d);
或
DateTime d;
DateTime.TryParseExact("28/3/2014", "dd/M/yyyy",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out d);
试试这个:
DateTime d;
DateTime.TryParseExact("28/3/2014", "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out d);
问题在于输入月份的数字格式。您已将格式设置为"MM",但只传递参数3。试试28/03/2014(用"03"代替简单的"3")。顺便说一下,格式字符串可以简单地为"dd/MM/yyyy"而不是"dd'/'MM'/'yyyy"。查看http://dotnetfiddle.net/I3Dyod
我不小心漏掉了秒部分,并试图翻译这个:
DateTime.TryParse(@"1/1/2000 00:00:000", out DateTime dtLastRun);
应该是:
DateTime.TryParse(@"1/1/2000 00:00:00:000", out DateTime dtLastRun);
我不能弄清楚为什么DateTime返回一个DateTime2响应。但无论如何,如果您有一个无效的字符串,您将获得默认时间返回。