2009-09-07 33 views
30

¿Hay alguna forma de establecer o reemplazar el formato predeterminado de fecha y hora para una aplicación completa? Estoy escribiendo una aplicación en C# .Net MVC 1.0 y uso muchos genéricos y reflexión. Sería mucho más simple si pudiera anular el formato predeterminado DateTime.ToString() para que sea "dd-MMM-aaaa". No deseo que este formato cambie cuando el sitio se ejecuta en una máquina diferente.Establecer formato predeterminado de fecha y hora C#

Edit - Solo para aclarar me refiero específicamente a llamar a ToString, no a alguna otra función de extensión, esto se debe al código de reflexión/generado. Sería más fácil simplemente cambiar la salida ToString.

Respuesta

42

El "formato por defecto" de una fecha y hora es:

ShortDatePattern + ' ' + LongTimePattern 

al menos en el actual mono implementation. Esto es particularmente doloroso en caso de que desee mostrar algo así como 2001-02-03T04: 05: 06Z es decir, la fecha y la hora combinada como se especifica en ISO 8606, pero no es un gran problema en su caso:

using System; 
using System.Globalization; 
using System.Threading; 

namespace test { 
    public static class Program { 
     public static void Main() { 
      CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
      culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy"; 
      culture.DateTimeFormat.LongTimePattern = ""; 
      Thread.CurrentThread.CurrentCulture = culture; 
      Console.WriteLine(DateTime.Now); 
     } 
    } 
} 

Este configurará el comportamiento predeterminado de ToString en las fechas para devolver el formato que espera.

+1

Gracias por la respuesta, ¿dónde debería colocarse este código en un proyecto .Net MVC 1.0, lo he intentado en la vista y funciona, pero no en el archivo global.asax –

+1

¿Qué quiere decir con "en la vista" ? ¿Y qué hiciste en el global.asax exactamente? –

+1

Si puse <% CultureInfo culture = (CultureInfo) CultureInfo.CurrentCulture.Clone(); culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy"; culture.DateTimeFormat.LongTimePattern = ""; Thread.CurrentThread.CurrentCulture = culture; %> en la parte superior de la vista formatea todos los DateTimes en la página correctamente. Sin embargo, cuando coloco ese código en el Application_Start del global.asax, no funciona. Supongo que esto tiene que ver con el enhebrado múltiple de las solicitudes en IIS. ¿Dónde está el mejor lugar para poner este código en mi sitio completo? –

0

puede escribir un ExtensionMethod así:

public static string ToMyString(this DateTime dateTime) 
{ 
    return dateTime.ToString("needed format"); 
} 
6

Es dependiente-settings de localización de la aplicación. Change that accordingly para obtener el formato correcto.

De lo contrario, tiene una clase auxiliar o un método de extensión que siempre maneja su DateTime.

public static string ToMyDateTime(this DateTime dateTime) { 
    return dateTime.ToString("dd-MMMM-yy"); 
} 
0

No estoy seguro si esto funcionaría para una aplicación web, pero podría intentar establecer la propiedad DateTimeFormat para la cultura actual.

Compruebe this y especialmente this.

1

Si quiere asegurarse de que su cultura se mantenga igual, simplemente configúrela para evitar problemas.

System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("nl-BE"); 
System.Threading.Thread.CurrentThread.CurrentCulture = ci; 
System.Threading.Thread.CurrentThread.CurrentUICulture = ci; 

El ejemplo anterior establece la cultura del hilo en belga-holandés.

CurrentCulture hace todo el manejo de fecha y hora y CurrentUICulture maneja la localización de UI como recursos.

Cuestiones relacionadas