解析" mm / dd / yy"字符串到" mm / dd / yyyy" C#中的日期对象

时间:2014-11-09 15:38:37

标签: c# parsing datetime format

当我尝试上传.CSV文件以便将其数据保存到数据库时,我正在使用C#编写ASP.NET Mvc应用程序并遇到问题。

问题来自.CSV文件的日期列。该列中使用了两种日期格式。第一个是" mm / dd / yyyy"通过以下代码解析DateTime对象没有问题:

// for the date : 09/30/2014
DateTime tempo = Convert.ToDateTime("09/30/2014");

第二种格式是" mm / dd / yy"。上述相同的方法不适用于此格式并引发异常

// for the date : 09/30/14
DateTime tempo = Convert.ToDateTime("09/30/14");
// this line throws ;
// [09/30/14] String was not recognized as a valid DateTime. exception

是否有适用于这两种日期格式的解决方案?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

首先,mm specifier是分钟,MM specifier是几个月。默认情况下,Convert.ToDateTime method会使用您的CurrentCulture。这意味着MM/dd/yy不是CurrentCulture的标准日期和时间格式,而是MM/dd/yyyy

您可以使用custom date and time formatting string之类的;

string s = "09/30/14";
DateTime date;
if(DateTime.TryParseExact(s, "MM/dd/yy", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out date))
{
    // Successfully parse
}

请注意"/" custom format specifier具有替换我当前文化或提供的文化日期分隔符的特殊含义。这意味着甚至如果您的字符串和格式匹配,您解析将失败。

  

是否有适用于这两种日期格式的解决方案?

DateTime.TryParseExact method has an overload将格式作为字符串数组。如果您的字符串与 格式之一匹配,则会返回true

string s = "09/30/14";
sstring[] formats = {"MM/dd/yy", "MM/dd/yyyy"};
DateTime date;
if(DateTime.TryParseExact(s, formats, CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out date))
{
    // Successfully parse
}

您还可以查看CurrentCulture的所有标准日期和时间模式;

foreach (var format in CultureInfo.CurrentCulture.
                       DateTimeFormat.
                       GetAllDateTimePatterns())
{
    Console.WriteLine (format);
}