如何通过调用DateTime.ParseExact同时接受两位数和四位数的年份

本文关键字:两位 四位 DateTime 调用 何通过 ParseExact | 更新日期: 2023-09-27 18:29:42

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

如何通过调用DateTime.ParseExact同时接受两位数和四位数的年份

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

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

调用接受一系列可能格式的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文档。

使用重载的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);

您可以始终使用适当的重载:

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