Conversie data pentru cultura romana (ro-RO)

Vreau sa convertesc date calendaristice din cultura romana (ro-RO) din string in DateTime. Datele sunt de genul 8 Oct 2008, 9 Oct 2008, 12 Dec 2008. DateTime.TryParseExact accepta formatul "d MMM yyyy", numai ca pentru cultura romana datele trebuie sa fie de forma 8 Oct. 2008, 9 Oct. 2008, 12 Dec. 2008 (cu punct dupa luna). Obtin expresia regulata pentru gasirea lunii din data, iar dupa luna inserez punctul.
Pentru asta am nevoie de un MatchEvaluator care e un delegat cu signatura delegate string MatchEvaluator(Match m)

static string Evaluator(Match match) {
return match.ToString() + ".";
}

Evolutia pointerilor la functii incepand de la C# 1.0 pana la C# 3.0 e una pozitiva, in sensul claritatii codului. Daca in 1.0 trebuia sa scrii efectiv metoda ca membru al unei clase, iar in 2.0 nu e tocmai naturala inserararea codului printre parametri, in 3.0 expresiile lambda simplifica mult tehnica.



var strDate = "8 Oct 2008";
var regForReplace = new Regex(@"[a-zA-Z]{3}");

//C# 1.1 delegat
var sDate = regForReplace.Replace(strDate, Evaluator);
Console.WriteLine(sDate); // 8 Oct. 2008

//C# 2.0 metoda anonima
var aDate = regForReplace.Replace(strDate, delegate (Match match ){
return m.ToString() + ".";
});
Console.WriteLine(aDate); // 8 Oct. 2008


//C# 3.0 expresie lambda
var lDate = regForReplace.Replace(strDate, match => match.ToString() + ".");
Console.WriteLine(lDate); // 8 Oct. 2008


DateTime date;
if (DateTime.TryParseExact(lDate , "d MMM yyyy",
CultureInfo.GetCultureInfo("ro-RO"),
DateTimeStyles.None, out date))
{
Console.WriteLine(date); //08.10.2008 00:00:00
}

Comments

Popular posts from this blog

IIS 7.5, HTTPS Bindings and ERR_CONNECTION_RESET

Verify ILogger calls with Moq.ILogger

Table Per Hierarchy Inheritance with Column Discriminator and Associations used in Derived Entity Types