yyyymmddhhmmss today now new formato fff fecha c# datetime

c# - today - Analizando una fecha como "Miércoles 13 de enero de 2010" con.NET



formato fecha datetime c# (7)

¿Cómo puedo convertir las siguientes cadenas a un objeto System.DateTime?

Miércoles 13 de enero de 2010
Jueves 21 de enero de 2010
Miércoles 3 de febrero de 2010

Normalmente algo como lo siguiente lo haría

DateTime dt; DateTime.TryParseExact(value, "dddd d MMMM yyyy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt);

pero esto no funciona debido a la ''th'', ''st'' o ''rd'' en la cadena

Actualizar

Parece que DateTime no admite el formateo de ''th'', ''st'', ''rd'', etc., por lo que deben eliminarse antes de realizar el análisis. Rubens Farias proporciona una agradable expresión regular a continuación.


¿Dónde aparece "th", "st", "nd" o "rd" a continuación?

  • mo nd ay
  • martes
  • miércoles
  • el jueves
  • viernes
  • satu rd ay
  • su nd ay

  • enero

  • febrero
  • marzo
  • abril
  • mayo
  • junio
  • julio
  • augu st
  • septiembre
  • octubre
  • noviembre
  • diciembre

Sin embargo, usted sabe que esos 4 siempre serán seguidos por un espacio. Entonces, a menos que me haya perdido algo, un simple

value = value.Replace("August","Augus").Replace("nd ","").Replace("st ","").Replace("nd ","").Replace("rd ","").Replace("Augus","August"); DateTime dt; DateTime.TryParseExact(value,"DDDD dd MMMM yyyy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt);


¿Qué hay de despojarlos?

string value = "Wednesday 13th January 2010"; DateTime dt; DateTime.TryParseExact( Regex.Replace(value, @"(/w+ /d+)/w+ (/w+ /d+)", "$1 $2"), "dddd d MMMM yyyy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt);


Ampliando el enfoque de Kenny, agregué un código para pasar enteros a la variable DateTime ...

string sDate = "Wednesday 13th January 2010"; string[] dateSplit = sDate.Split ('' ''); string day = dateSplit[1].Substring(0, dateSplit[1].Length - 2); int monthInDigit = DateTime.ParseExact(dateSplit[3], "MMMM", CultureInfo.InvariantCulture).Month; DateTime date = new DateTime(Convert.ToInt16(year), monthInDigit, day);


Otra alternativa es usar caracteres de escape para manejar ( st , nd , rd y th ) sin quitarlos antes de la llamada de DateTime.TryParseExact

string dtstr = "Saturday 23rd January 2016"; DateTime dt; string[] formats = new string[] { "dddd d//s//t MMMM yyyy", "dddd d//n//d MMMM yyyy", "dddd d//r//d MMMM yyyy", "dddd d//t//h MMMM yyyy" }; bool result = DateTime.TryParseExact(dtstr, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);


Otro enfoque.

string sDate = "Wednesday 13th January 2010"; string[] sFields = sDate.Split ('' ''); string day = sFields[1].Substring (0, (sFields[1].Length - 2)); DateTime date = new DateTime (sFields[3], sFields[2], day);


Recordé esta publicación sobre el uso de MGrammar para analizar muchas formas diferentes de expresar fechas y horas. No responde exactamente su pregunta, pero podría servir como una base útil según cuál sea su objetivo final.