当我尝试上传.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
是否有适用于这两种日期格式的解决方案?
感谢您的帮助。
答案 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);
}