Rauf
Rauf

Reputation: 12842

Detect the date format C#

I have some automated C# windows services to upload text to the database. The 'text' is generated by a third party application where we don't have any control.

My issue is that the text contains a column for date. The default date format is DD/MM/YY. But some times we get MM/YY/DD

Is there any tricky way to identify or convert MM/YY/DD to DD/MM/YY. The data might only contain date for three, four days. So I plan to check if the date is in tolerance with three or four days, it will be accepted. Other wise manually correct it. For example,

14/08/17 is accepted

08/17/14 is not accepted. Logic should convert this to 14/08/17

Any ideas ?

Upvotes: 1

Views: 1420

Answers (1)

D Ie
D Ie

Reputation: 841

You could try and parse with the good format, if it goes ok there is no problem, it will return the date. If it goes wrong, you tryparse with the 'secondary format'. If everything goes ok, it will return the date.

Note that if the parsed date it's more than 3 days ahead, it won't count as a valid date and will return null.

if(DateTime.TryParseExact(input, "dd/MM/yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue)
{
     int daysBetween = (dateValue-DateTime.Now).Days
     if(daysBetween < 4)
     {
          return dateValue
     }
}
if(DateTime.TryParseExact(input, "MM/yy/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue)
{
     int daysBetween = (dateValue-DateTime.Now).Days
     if(daysBetween < 4)
     {
          return dateValue;
     }
}
return null

If null gets returned, you'll have an invalid date, if not, that will be the parsed date

Upvotes: 2

Related Questions