2009-09-07 15 views
30

Gibt es eine Möglichkeit zum Festlegen oder Überschreiben des Standard-DateTime-Formats für eine gesamte Anwendung. Ich schreibe eine App in C# .Net MVC 1.0 und benutze viele Generika und Überlegungen. Wäre viel einfacher, wenn ich das Standardformat DateTime.ToString() als "dd-MMM-yyyy" überschreiben könnte. Ich möchte nicht, dass sich dieses Format ändert, wenn die Site auf einem anderen Computer ausgeführt wird.Standard-DateTime-Format festlegen C#

Edit - Nur um zu verdeutlichen, ich meine speziell Aufruf der ToString, nicht eine andere Erweiterungsfunktion, dies ist wegen der Reflexion/generierten Code. Wäre einfacher, nur die ToString-Ausgabe zu ändern.

Antwort

42

"Standardformat" ein Datum ist:

ShortDatePattern + ' ' + LongTimePattern 

zumindest im aktuellen mono implementation. Dies ist besonders schmerzhaft, wenn Sie etwas wollen, wie 2001-02-03T04 angezeigt: 05: 06Z dh das Datum und die Uhrzeit in ISO 8606 kombiniert, wie angegeben, aber kein großes Problem in Ihrem Fall:

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); 
     } 
    } 
} 

Diese wird das Standardverhalten von ToString auf Datumswerte festlegen, um das erwartete Format zurückzugeben.

+1

Danke für die Antwort, wo dieser Code in ein .Net MVC 1.0 Projekt eingefügt werden soll, habe ich in der Ansicht versucht und es funktioniert, aber nicht in der global.asax –

+1

Was meinst du mit "in the view" ? Und was hast du in der global.asax genau gemacht? –

+1

Wenn ich <% CultureInfo culture = (CultureInfo) CultureInfo.CurrentCulture.Clone(); culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy"; culture.DateTimeFormat.LongTimePattern = ""; Thread.CurrentThread.CurrentCulture = Kultur; %> an der Spitze der Ansicht formatiert es alle DateTimes auf der Seite korrekt. Wenn ich diesen Code jedoch in den Application_Start von global.asax lege, funktioniert er nicht. Ich nehme an, dies hat mit dem multiplen Threading der Anforderungen in IIS zu tun. Wo ist der beste Ort, um diesen Code auf meine gesamte Website zu beeinflussen. –

0

Sie können ein Extension wie folgt schreiben:

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

Es auf Ihrer Anwendung localization-Einstellungen abhängig ist. Change that accordingly, um das richtige Format zu erhalten.

Andernfalls haben Sie eine Helfer-Klasse oder eine Erweiterung-Methode, die immer Ihre DateTime behandelt.

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

Ich bin mir nicht sicher, ob dies für eine Webanwendung funktionieren würde, aber Sie könnten versuchen, die -Eigenschaft für die aktuelle Kultur festzulegen.

Überprüfen Sie this und speziell this.

1

Wenn Sie sichergehen möchten, dass Ihre Kultur gleich bleibt, stellen Sie sie selbst ein, um Probleme zu vermeiden.

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

Das obige Beispiel legt die Kultur des Threads auf belgisch-niederländisch fest.

CurrentCulture übernimmt die gesamte Verarbeitung von Datum und Uhrzeit und CurrentUICulture behandelt die UI-Lokalisierung wie Ressourcen.

Verwandte Themen