Imposta il formato DateTime predefinito c #

C’è un modo per impostare o sovrascrivere il formato DateTime predefinito per un’intera applicazione. Sto scrivendo un’app in C # .Net MVC 1.0 e uso un sacco di generici e riflessioni. Sarebbe molto più semplice se potessi sostituire il formato predefinito DateTime.ToString () in “dd-MMM-yyyy”. Non voglio che questo formato cambi quando il sito viene eseguito su un altro computer.

Modifica – Giusto per chiarire intendo specificamente chiamare ToString, non qualche altra funzione di estensione, questo è dovuto al codice riflesso / generato. Sarebbe più semplice cambiare l’output ToString.

Il “formato predefinito” di un datetime è:

ShortDatePattern + ' ' + LongTimePattern 

almeno nell’attuale implementazione mono . Questo è particolarmente doloroso nel caso in cui si desideri visualizzare qualcosa come 2001-02-03T04: 05: 06Z, vale a dire la data e l’ora combinate come specificato in ISO 8606 , ma non è un grosso problema nel tuo 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); } } } 

Questo imposterà il comportamento predefinito di ToString su data / ora per restituire il formato che ti aspetti.

Dipende dalle impostazioni di localizzazione dell’applicazione. Modificalo di conseguenza per ottenere il formato corretto.

Altrimenti disponi di un helper-class o di un metodo di estensione che gestisce sempre il tuo DateTime.

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

DateTime.ToString () combina le stringhe di formato personalizzate restituite dalle proprietà ShortDatePattern e LongTimePattern di DateTimeFormatInfo . È ansible specificare questi modelli in DateTimeFormatInfo.CurrentInfo .

Non ho mai provato questo da solo.

Se vuoi essere sicuro che la tua cultura sia la stessa, basta impostarla tu stesso per evitare problemi.

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

L’esempio precedente imposta la cultura del thread su Belgian-Dutch.

CurrentCulture gestisce tutte le operazioni di data e ora e CurrentUICulture gestisce la localizzazione dell’interfaccia utente come le risorse.

Puoi scrivere un ExtensionMethod come questo:

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

Non sono sicuro che questo potrebbe funzionare per un’app Web, ma potresti provare a impostare la proprietà DateTimeFormat per la cultura corrente.

Controlla questo e specialmente questo .