DevTips.NET

Tekst converteren naar een datum

Het converteren van tekst naar een datum kan op verschillende manieren. De makkelijkste manier lijkt op de volgende code.

public static DateTime ToDateTime(this string text, CultureInfo culture) 
{
DateTime result = DateTime.MinValue;
DateTime.TryParse(text, culture, DateTimeStyles.None, out result);
return result;
}

Deze extension method werkt alleen wanneer de notatie van de tekst herkend wordt als een valide datum. Een tekst als "20131024" bijvoorbeeld, of "2013-10-24 17:30". Maar wanneer de datum-waarde onderdeel is van een grotere string zal de datum niet herkend worden. Voor dergelijke gevallen toont het onderstaande codeknipsel een oplossing. 

Deze extension method kan je als volgt gebruiken.

string naam = "versie20100414";
DateTime datum = naam.ToDateTime("yyyyMMdd", CultureInfo.GetCultureInfo("nl-NL"),
DateTimeStyles.AssumeUniversal;
C#

Code

public static DateTime ToDateTime(this string text, string format, System.Globalization.CultureInfo culture, System.Globalization.DateTimeStyles style)
{
            int index = 0;
            int length = format.Length;
            DateTime result = DateTime.MinValue;
            while (length <= text.Length)
            {
                while (index + length <= text.Length)
                {
                    bool success = DateTime.TryParseExact(text.Trim().Substring(index, length), format, culture, style, out result);
                    if (result.Year > 2100 || result.Year < 2000) success = false;
                    if (success) return result;
                    index++;
                }
                index = 0;
                length++;
            }
            return result;
}
comments powered by Disqus