2009-09-07 16 views
30

Esiste 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.Imposta formato DateTime predefinito C#

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

risposta

42

Il "formato predefinito" di un datetime è:

ShortDatePattern + ' ' + LongTimePattern 

almeno nella corrente mono implementation. Questo è particolarmente doloroso nel caso in cui si desidera visualizzare qualcosa come 2001-02-03T04: 05: 06Z ossia la data e l'ora combinati come specificato nel 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.

+1

Grazie per la risposta, dove dovrebbe essere inserito questo codice in un progetto .Net MVC 1.0, ho provato nella vista e funziona, ma non nel global.asax –

+1

Cosa intendi con "nella vista" ? E cosa hai fatto esattamente nel global.asax? –

+1

Se inserisco <% CultureInfo culture = (CultureInfo) CultureInfo.CurrentCulture.Clone(); culture.DateTimeFormat.ShortDatePattern = "gg-MMM-aaaa"; culture.DateTimeFormat.LongTimePattern = ""; Thread.CurrentThread.CurrentCulture = cultura; %> nella parte superiore della vista formatta correttamente tutti i DateTimes sulla pagina. Tuttavia quando inserisco quel codice in Application_Start del global.asax non funziona. Presumo che questo abbia a che fare con il threading multiplo delle richieste in IIS. Dov'è il posto migliore dove mettere questo codice per influenzare il mio intero sito. –

0

è possibile scrivere un ExtensionMethod come questo:

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

Essa dipende localizzazione-impostazioni dell'applicazione. Change that accordingly per ottenere il formato corretto.

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

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

Non sono sicuro che questo potrebbe funzionare per un'applicazione Web, ma potresti provare a impostare la proprietà DateTimeFormat per la lingua corrente.

Controllare this e specialmente this.

1

Se si vuole essere sicuri che la propria cultura sia la stessa, è sufficiente impostarla da soli 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.

Problemi correlati