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.
Intente agregar la cultura invariante, utilizando la propiedad InvariantCulture
Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt", CultureInfo.InvariantCulture));
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"));