Dans une application ASP.NET, je mets la culture à LV-LV. Tout va bien, mais le format de date courte par défaut semble être "yyyy.mm.dd". Le client veut que ce soit "jj.mm.aaaa" (qui est en fait la norme LV). Où ASP.NET obtient-il les paramètres de date/heure pour une culture spécifique? Comment peuvent-ils être changés pour une culture unique, sans affecter les autres cultures (l'application est censée être localisable)?D'où ASP.NET obtient-il ses paramètres de culture?
Répondre
J'ai déjà eu un problème similaire et résolu avec:
DateTimeFormatInfo dtfi = (DateTimeFormatInfo)Thread.CurrentThread.CurrentCulture.DateTimeFormat.Clone();
dtfi.ShortDatePattern = "dd.MM.yyyy";
dtfi.DateSeparator = ".";
Thread.CurrentThread.CurrentCulture.DateTimeFormat = dtfi ;
Thread.CurrentThread.CurrentUICulture.DateTimeFormat = dtfi;
De cette façon, vous obtenez de garder tous les paramètres régionaux, sauf le format de date.
Ce code a été exécuté sur OnLoad dans notre classe de base de pages. Je ne suis pas sûr que ce soit le meilleur moyen.
.Net obtient les paramètres de date/heure pour une culture spécifique de la classe DateTimeFormatInfo. Vous pouvez définir la propriété DateTimeFormat d'un CultureInfo avec un DateTimeFormatInfo que vous avez modifié. Si cette culture est la culture actuelle, vous pouvez la définir sur CurrentCulture. D'une manière ou d'une autre, cela n'affecte que CultureInfo que vous avez créé et n'affectera aucune autre culture. (Tout appel à CultureInfo.GetCultureInfo ("lv-LV") ne récupérera pas ces modifications puisqu'il s'agit d'une copie en lecture seule.) Vous ne devez pas nécessairement transmettre CultureInfo à des méthodes de formatage DateTime (ToString, ParseExact) - vous pouvez passer le modèle explicite ou le DateTimeFormatInfo.
CultureInfo lvLV = new CultureInfo("lv-LV");
DateTimeFormatInfo lvLVdtfi = (DateTimeFormatInfo) lvLV.DateTimeFormat.Clone();
lvLVdtfi.ShortDatePattern = "dd.MM.yyyy";
lvLV.DateTimeFormat = lvLVdtfi;
DateTime.Now.ToString("d", lvLV); // short date pattern from modified lv-LV CultureInfo
DateTime.Now.ToString("d", lvLVdtfi); // short date pattern from modified DateTimeFormatInfo
DateTime.Now.ToString("dd.MM.yyyy"); // explicit short date pattern
Si LV-LV est la culture actuelle de Windows, vous pouvez définir une commande prioritaire utilisateur (utilisation intl.cpl le panneau de commande Options régionales et linguistiques et personnaliser le format) et le cadre va prendre cette place.
Quelque chose comme ça m'a traversé l'esprit aussi. Pourtant, il semble en quelque sorte ... faux. : D Je n'aime pas le codage en dur. Peut-être y at-il des clés de registre Sytem qui doivent être modifiées pour cette culture ou quelque chose? –
Le problème avec cela est si certains de vos utilisateurs préfèrent le format de date standard ISO. –