2009-09-07 11 views
30

Existe-t-il un moyen de définir ou de remplacer le format DateTime par défaut pour une application entière. J'écris une application dans C# .Net MVC 1.0 et utilise beaucoup de génériques et de réflexion. Serait beaucoup plus simple si je pouvais remplacer le format par défaut DateTime.ToString() pour être "jj-MMM-yyyy". Je ne veux pas que ce format change lorsque le site est exécuté sur une machine différente. Pour clarifier, je veux dire spécifiquement appeler la ToString, pas une autre fonction d'extension, c'est à cause du code généré/réfléchi. Serait plus facile de simplement changer la sortie ToString.Définir le format DateTime par défaut C#

Répondre

42

Le "format par défaut" d'un datetime est:

ShortDatePattern + ' ' + LongTimePattern 

au moins dans le courant mono implementation. Cela est particulièrement douloureux au cas où vous voulez afficher quelque chose comme 2001-02-03T04: 05: 06Z-à-dire la date et l'heure combinée comme indiqué dans ISO 8606, mais pas un gros problème dans votre cas:

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

Cette va définir le comportement par défaut de ToString sur datetimes pour retourner le format que vous attendez.

+1

Merci pour la réponse, où ce code devrait être mis dans un projet .Net MVC 1.0, j'ai essayé dans la vue et cela fonctionne, mais pas dans le global.asax –

+1

Que voulez-vous dire par "dans la vue" ? Et qu'avez-vous fait dans le global.asax exactement? –

+1

Si je mets <% CultureInfo culture = (CultureInfo) CultureInfo.CurrentCulture.Clone(); culture.DateTimeFormat.ShortDatePattern = "dd-MMM-aaaa"; culture.DateTimeFormat.LongTimePattern = ""; Thread.CurrentThread.CurrentCulture = culture; %> en haut de la vue, il formate correctement tous les DateTimes sur la page. Cependant, lorsque je mets ce code dans le fichier Application_Start de global.asax, cela ne fonctionne pas. Je présume que cela a à voir avec le multi-threading des requêtes dans IIS. Où est le meilleur endroit pour mettre ce code à affecter mon site entier. –

0

Vous pouvez écrire un ExtensionMethod comme ceci:

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

Il dépend de leur localisation paramètres de votre application. Change that accordingly pour obtenir le format correct.

Sinon, utilisez une classe d'assistance ou une méthode d'extension qui gère toujours votre DateTime.

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

Je ne sais pas si cela fonctionnerait pour une application Web, mais vous pouvez essayer de définir la propriété DateTimeFormat pour la culture actuelle.

Vérifiez this et en particulier this.

1

Si vous voulez être sûr que votre culture reste la même, configurez-la vous-même pour éviter les problèmes.

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

L'exemple ci-dessus définit la culture du thread en belgo-néerlandais.

CurrentCulture gère l'ensemble de la date et de l'heure et CurrentUICulture gère les ressources similaires à la localisation de l'interface utilisateur.

Questions connexes