Speed Test: DateTime.TryParse vs Regex.IsMatch

CSharp · Console

/Program.cs

using System;

public class Program
{
	string[] arrDates = new string[10000];
	
	Int64 regexTime, tryParseTime;
	
	public static void Main()
	{
		var p = new Program();
		p.initialise();
		p.regexTime = p.RunRegexDemo();
		p.tryParseTime = p.RunDateTimeParseDemo();
		
		string.Format("Tests concluded. RegEx.IsMatch took: {0}ms, DateTime.TryParse took: {1}", p.regexTime, p.tryParseTime).Dump();
	}

	public void initialise()
	{
		Random ryear, rmonth, rdate;
		ryear = new Random();
		rmonth = new Random();
		rdate = new Random();
		int y, m, d;
		
		DateTime dt;
		
		for (int i = 0; i < arrDates.Length; i++)
		{
			y = 0;
			m = 0;
			d = 0;
			
			while (y < 1850)
			{
				y = ryear.Next(2050);
			}

			while (m < 1 || m > 12)
			{
				m = rmonth.Next(12);
			}

			while (d < 1 || d > 28)
			{
				d = rdate.Next(28);
			}

			dt = new DateTime(y, m, d);
			arrDates[i] = dt.ToString("yyyy-MM-dd");
		}
	}

	public Int64 RunRegexDemo()
	{
		System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch();
		Console.WriteLine("Starting Regex demo .....");
		st.Start();
		int i = 1;
		foreach (string x in arrDates)
		{
			var result = System.Text.RegularExpressions.Regex.IsMatch(x, @"^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$");
			//Console.Write(result);
			//(string.Format("{0}{1}. {2} is a valid date? = {3}", System.Environment.NewLine, i++, x, System.Text.RegularExpressions.Regex.IsMatch(x, @"^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$"))).Dump();
		}

		st.Stop();
		("Ended RegEx demo. Elapsed time: " + st.ElapsedMilliseconds).Dump();
		
		return st.ElapsedMilliseconds;
	}

	public Int64 RunDateTimeParseDemo()
	{
		var st = new System.Diagnostics.Stopwatch();
		Console.WriteLine("Starting DateTime.Parse demo .......");
		st.Start();
		DateTime dt;
		foreach (string x in arrDates)
		{
			var result = DateTime.TryParse(x, out dt);
		//(string.Format("{0}{1} is a valid date? = {2}", System.Environment.NewLine, x, DateTime.TryParse(x, out dt))).Dump();
		}

		st.Stop();
		("Ended TryParse demo. Elapsed time: " + st.ElapsedMilliseconds).Dump();
		return st.ElapsedMilliseconds;
	}
}
;