如何通过单次调用DateTime.ParseExact来接受两位数和四位数年份?

时间:2012-03-30 14:07:56

标签: c# parsing datetime

我正在使用DateTime.ParseExact行的自定义格式字符串调用.NET的"MM/dd/yyyy h:mmt"。此字符串处理四位数年份但不是两位数年份。有没有办法在单个ParseExact调用中处理这两种情况?我试过"MM/dd/yy h:mmt",它只处理两位数的情况。

4 个答案:

答案 0 :(得分:19)

您可以在ParseExact的重载上为第二个参数传递一组格式字符串 - 这将包括2年和4年的变体。

DateTime.ParseExact(myDateTime, 
                    new []{"MM/dd/yy h:mmt", "MM/dd/yyyy h:mmt"},
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.None)

答案 1 :(得分:3)

调用接受一系列可能格式的DateTime.ParseExact的重载:

DateTime dt =
    DateTime.ParseExact(s, new[] { "MM/dd/yyyy h:mmt", "MM/dd/yy h:mmt" }, null, 0);

对于第三个参数,如果您的日期字符串已针对用户当前的文化进行了本地化,则传递nullDateTimeFormatInfo.CurrentInfo;如果您的日期字符串始终采用美国格式,则传递DateTimeFormatInfo.InvariantInfo

对于第四个参数,0相当于DateTimeStyles.None

请参阅MSDN Library documentation

答案 2 :(得分:1)

使用带有字符串数组的重载DateTime.ParseExact

MSDN:

string[] formats= {"MM/dd/yyyy h:mmt", "MM/dd/yy h:mmt"};


var dateTime = DateTime.ParseExact(dateString, formats, 
                                        new CultureInfo("en-US"), 
                                        DateTimeStyles.None);

答案 3 :(得分:0)

您可以随时使用appropriate overload

var date = DateTime.ParseExact(dateString,
                               new[] { "MM/dd/yyy h:mmt", "MM/dd/yy h:mmt" },
                               new CultureInfo("en-US"), 
                               DateTimeStyles.None);