DateTime TryParse Exact returning 0001:01:01



我正在尝试解析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说明符是针对0112的,这不适用于月份值3。您应该使用M说明符,它用于112

它总是返回我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是/和ShortDatePatterndd/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响应。但无论如何,如果您有一个无效的字符串,您将获得默认时间返回。

相关内容

  • 没有找到相关文章

最新更新