我试图解析
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
答案 0 :(得分:2)
答案 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适用于01
到12
,不适合月份值3
。您应该使用1
到12
的{{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
string
(DateTime
没有格式)结果,您有几个选项;
如果您当前的热门文化DateTime.MinValue
field为/ DateSeperator
为dd/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
上查看