parseexact formato fecha ejemplos convertir c# string datetime .net-4.0 datetime-format

c# - fecha - La cadena personalizada de formato DateTime no funciona como se esperaba



string.format c# fecha (5)

Tengo una cadena de formato de fecha "M/d/yyyy h:m:ss tt" personalizada: "M/d/yyyy h:m:ss tt" .

Por ejemplo, con la fecha "18 de septiembre de 2012 @ mediodía", espero que el resultado sea algo así como "9/18/2012 12:0:00 PM" .

El tiempo parece estar formateando correctamente, pero la parte de la fecha se está arruinando. Estoy viendo las fechas formateadas como "MM-dd-yyyy" y no puedo entender por qué.

Aquí hay un código de muestra para reproducir el problema:

var datetime = DateTime.Now; Console.WriteLine("Date: " + datetime.ToString("MMMM d, yyyy")); // Date: October 11, 2012 --> correct Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt")); // Date: 10-11-2012 4:34:17 PM --> wrong

Aquí está el documento MSDN para cadenas de formato de fecha y hora personalizadas .

¿Alguna idea sobre qué estoy haciendo mal? ¿Cómo puedo lograr mi resultado deseado?

Editar:
Lo que está incorrecto en la última línea del código de muestra es que hay guiones en lugar de barras y no sé por qué.

Además, el idioma de mi computadora está configurado en inglés (Canadá). Pero ni mi formato de fecha "corta" ni "larga" se parecen a Md-yyyy así que no tengo idea de dónde viene eso.


Tratar:

datetime.ToString("M/d/yyyy h:m:ss tt", CultureInfo.InvariantCulture);

Su cultura puede estar anulando su separador de fecha.


Este artículo explica cómo la cultura actual puede cambiar el resultado de DateTime.ToString (cadena). Lea la sección que contiene este texto:

Este método utiliza información de formato derivada de la cultura actual

Este artículo explica cómo obtener / establecer la cultura para que pueda probar esta posibilidad.

Este artículo explica cómo puede proporcionar de manera explícita DateTime.ToString con una cultura para usar.


/ es el separador de fecha, que depende de la cultura; en su cultura actual se define como - . Si quieres siempre a / use:

Console.WriteLine("Date: " + datetime.ToString("M/"//"d/"//"yyyy h:m:ss tt"));

o

Console.WriteLine("Date: " + datetime.ToString("M''/''d''/''yyyy h:m:ss tt"));

es decir, ponga las partes que desea que salgan "tal cual" dentro de comillas.



Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; var datetime = DateTime.Now; Console.WriteLine("Date: " + datetime.ToString("MMMM d, yyyy")); // Date: October 11, 2012 --> correct Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt"));