RegEx for yyyyMMdd format

I have a csv file that has a date column in the following format yyyyMMdd
eg:- 20011114

i want to parse this date via a RegEx into a format that is acceptable by DateTime class in C#

this is what i have done so far (see code section below)

however i am getting an error "Input string was not in a correct format" when the code enters the following line.


if (!ConvertToDate(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out date))



m = Regex.Match(str, @"(?<=^(([2-9]\d{3}|1999)((0[1-9]|1[012])(0[1-9]|1\d|2[0-8])|(0[13456789]|1[012])(29|30)|(0[13578]|1[02])31)|(([2-9]\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00))0229)$)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
            if (m.Success)
            {
                DateTime date;
                if ((defaultFormat ^ DateTimeFormat.USA_DATE) == DateTimeFormat.USA_DATE)
                {
                    if (!ConvertToDate(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["day"].Value), int.Parse(m.Groups["month"].Value), out date))
                        return false;
                }
                else
                {
                    if (!ConvertToDate(int.Parse(m.Groups["year"].Value), int.Parse(m.Groups["month"].Value), int.Parse(m.Groups["day"].Value), out date))
                        return false;
                }
                parsedDate = new ParsedDateTime(m.Index, m.Length, -1, -1, date);
                return true;

Open in new window

2oothAsked:
Who is Participating?
 
MathiyazhaganConnect With a Mentor Commented:
I too suggest you to go with DateTime functions as it assures valid date. you can do it with TryParseExact method and  cultureInfo.have attched sample code; hope this helps.
private bool GetValidDate(string str,bool IsUSCulture,out DateTime date)
        {
            System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.InvariantCulture;
            if (IsUSCulture)
                culture = new System.Globalization.CultureInfo("en-US");
            return DateTime.TryParseExact(str, "yyyyMMdd", culture , System.Globalization.DateTimeStyles.None, out date);
        }

//using the above code

 DateTime d;
            if (GetValidDate("20011114", true , out d))
            { 
                //work with valid date d
            }

Open in new window

0
 
Gurvinder Pal SinghCommented:
Assuming that month and date starts from 0
[0-9]{1,4}([0][0-9]|[1][0-2])([0-2][0-9]|[3][0-1])
0
 
Gurvinder Pal SinghConnect With a Mentor Commented:
or just this
Dim D As Date = Date.ParseExact(X, "yyyyMMdd", Nothing);
from here
http://bytes.com/topic/visual-basic-net/answers/616836-type-conversion-date-formatted-yyyymmdd


0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
Naman GoelSoftware engineer 1Commented:
You can refer to following link
 
http://www.codeproject.com/KB/recipes/RegexTester.aspx 
0
 
käµfm³d 👽Commented:
I also agree that you should use the Parse group of methods which are members of the DateTime struct.
0
 
2oothAuthor Commented:
Thanks Guys!!!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.