2009-09-07 20 views
30

Czy istnieje sposób ustawienia lub przesłaniania domyślnego formatu DateTime dla całej aplikacji. Piszę aplikację w C# .Net MVC 1.0 i używać dużo generycznych i refleksji. Byłoby znacznie prostsze, gdybym mógł zmienić domyślny format DateTime.ToString() na "dd-MMM-rrrr". Nie chcę, aby ten format zmieniał się, gdy witryna jest uruchamiana na innym komputerze.Ustaw domyślny format daty i czasu C#

Edycja - Po to, by wyjaśnić, mam na myśli konkretne wywoływanie ToString, a nie jakiejś innej funkcji rozszerzenia, jest to spowodowane odbiciem/generowanym kodem. Łatwiej byłoby po prostu zmienić wyjście ToString.

Odpowiedz

42

W "domyślny format" datetime jest:

ShortDatePattern + ' ' + LongTimePattern 

przynajmniej w obecnej mono implementation. Jest to szczególnie bolesne w przypadku, gdy chcesz wyświetlić coś podobnego 2001-02-03T04: 05: 06Z czyli data i czas łączy się w sposób określony w ISO 8606, ale nie jest to duży problem w przypadku:

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

This ustawi domyślne zachowanie ToString na datetimes, aby przywrócić oczekiwany format.

+1

Dzięki za odpowiedź, gdzie ten kod powinien zostać umieszczony w projekcie .Net MVC 1.0, próbowałem w widoku i to działa, ale nie w global.asax –

+1

Co masz na myśli przez "w widoku"? ? I co dokładnie zrobiłeś w pliku global.asax? –

+1

Jeśli wstawię <% CultureInfo culture = (CultureInfo) CultureInfo.CurrentCulture.Clone(); culture.DateTimeFormat.ShortDatePattern = "dd-MMM-rrrr"; culture.DateTimeFormat.LongTimePattern = ""; Thread.CurrentThread.CurrentCulture = culture; %> u góry widoku poprawnie formatuje wszystkie DateTimes na stronie. Jednak po umieszczeniu tego kodu w pliku Application_Start pliku global.asax nie działa. Przypuszczam, że ma to związek z wielokrotnym wątkiem żądań w IIS. Gdzie jest najlepsze miejsce, aby ten kod wpłynął na całą moją stronę. –

0

Można napisać ExtensionMethod tak:

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

To zależy od lokalizacji-ustawieniach aplikacji. Change that accordingly, aby uzyskać prawidłowy format.

W przeciwnym razie należy użyć klasy pomocniczej lub metody rozszerzającej, która zawsze obsługuje DateTime.

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

Nie jestem pewien, czy to zadziała w przypadku aplikacji internetowej, ale można spróbować ustawić właściwość DateTimeFormat dla aktualnej kultury.

Sprawdź this i specjalnie this.

1

Jeśli chcesz mieć pewność, że Twoja kultura pozostanie taka sama, po prostu ustaw ją samodzielnie, aby uniknąć problemów.

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

Powyższy przykład ustawia kulturę wątku na belgijsko-holenderski.

CurrentCulture obsługuje wszystkie daty i godziny, a CurrentUICulture obsługuje lokalizację interfejsu użytkownika, np. Zasoby.