Reputation: 170
I am working on an ASP.NET Mvc application with C# and facing a problem when I try to upload a .CSV file in order to save its data to database.
The problem comes from the date column of the .CSV file. There are two formats of date used in that column. The first one is "mm/dd/yyyy" that I have no problem to parse to a DateTime object by the following code:
// for the date : 09/30/2014
DateTime tempo = Convert.ToDateTime("09/30/2014");
The second format is "mm/dd/yy". The same method above doesn't work for this format and throws an exception
// 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
Is there a solution which works for both of date formats ?
Thanks for your help.
Upvotes: 0
Views: 3231
Reputation: 98740
First, mm
specifier is for minutes, MM
specifier is for months. Convert.ToDateTime
method uses your CurrentCulture
by default. That means MM/dd/yy
is not a standard date and time format your CurrentCulture
but MM/dd/yyyy
is.
You can use custom date and time formatting string like;
string s = "09/30/14";
DateTime date;
if(DateTime.TryParseExact(s, "MM/dd/yy", CultureInfo.InvariantCulture,
DateTimeStyles.None, out date))
{
// Successfully parse
}
Be aware "/"
custom format specifier has a special meaning of replace me with the current culture or supplied culture date separator. That means even if your string and format matches, you parsing will fail.
Is there a solution which works for both of date formats ?
DateTime.TryParseExact
method has an overload that takes formats as a string array. If your string matches one of your formats, it will returns 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
}
Also you can see all standard date and time patters of your CurrentCulture
like;
foreach (var format in CultureInfo.CurrentCulture.
DateTimeFormat.
GetAllDateTimePatterns())
{
Console.WriteLine (format);
}
Upvotes: 3