DateTime TryParse Exact返回0001:01:01

时间:2014-03-28 08:32:56

标签: c# datetime

我试图解析 DateTime字符串'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就是一个例子。日期也可以是28/12/2014

5 个答案:

答案 0 :(得分:2)

你的模式必须是

"dd'/'M'/'yyyy"

有关详细信息,请参阅文章Custom Date and Time Format Strings

答案 1 :(得分:1)

您的输入字符串月份没有前导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);

答案 2 :(得分:1)

Hamlet Hakobyans' answer是对的。但我想至少补充一些解释。

让我们一步一步地分析你的问题:

您说您的字符串为'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 specifier适用于0112,不适合月份值3。您应该使用112的{​​{3}}。

  

它总是回归我0001:01:01

因为您的TryParseExact返回false(因为您的格式不适合您的字符串)和来自M specifier;

  

结果

     

输入:System.DateTime

     

当此方法返回时,包含等效于的DateTime值   s中包含的日期和时间,如果转换成功,或   如果转换失败,则为MinValue

0001:01:01等于it's documentation(其他部分也是......)。这就是你获得这个价值的原因。

最后,您的代码应该是;

DateTime d;
DateTime.TryParseExact("28/3/2014", "dd/M/yyyy",
                        CultureInfo.InvariantCulture,
                        DateTimeStyles.None,
                        out d);

如果您希望28/3/2014 stringDateTime没有格式)结果,您有几个选项;

如果您当前的热门文化DateTime.MinValue field为/ DateSeperatordd/m/yyyy,则无需使用任何内容。刚刚;

Console.WriteLine(d); //This will be enough.

如果不是,您可以ShortDatePattern使用DateTime.ToString(String, IFormatProvider) overload;

Console.WriteLine(d.ToString("dd/M/yyyy", CultureInfo.InvariantCulture)); 

或者,无论您使用哪种文化,都可以逃避/;

Console.WriteLine(d.ToString("dd'/'M'/'yyyy"));

Console.WriteLine(d.ToString(@"dd\/M\/yyyy"));

答案 3 :(得分:0)

试试这个:

DateTime d;
DateTime.TryParseExact("28/3/2014", "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out d);

答案 4 :(得分:0)

问题是输入数字的格式为几个月。您已将格式设置为" MM"但你传递参数只有3。尝试28/03/2014(" 03"而不是简单" 3")。 顺便说一句,格式字符串可以简单地" dd / MM / yyyy"而不是" dd' /' MM' yyyy"。 在http://dotnetfiddle.net/I3Dyod

上查看