2013-04-26 12 views
5

Ho un sito web che scrive una data così:istanze di CultureInfo (da stessa cultura) cambia basate su OS

CultureInfo cultureInfo = CultureInfo.GetCultures(CultureTypes.AllCultures).FirstOrDefault(c => string.Equals(c.TwoLetterISOLanguageName, MvcApplication.Language)); 
return string.Concat(date.Day, ".", cultureInfo.DateTimeFormat.GetAbbreviatedMonthName(date.Month)); 

In entrambi mio PC (Windows 7, il Service Pack 1, la cultura spagnola) e il server (Windows Server 2012, Cultura inglese) il MvcApplication.Language è es quindi la cultura che ottengo dall'elenco è: es-ES.

Mi aspetterei che entrambi scrivano la stessa stringa (hanno culture diverse, ma non sto usando CurrentCulture). Tuttavia, i risultati sono abr nel mio PC e Abr. nel server.

Ho provato questo isolato da MvcApplication.Language utilizzando il LinqPAD ma è ancora diverso. Ho stampato gli array di AbbreviatedDayNames e AbbreviatedMonthNames e sono diversi in ogni computer.

Sto facendo qualcosa di sbagliato o questo è il comportamento previsto? Come posso fare per renderlo completamente indipendente da Windows/User Culture?

risposta

1

A è possibile vedere in this link da MSDN, le informazioni sulla cultura possono essere diverse su alcune versioni di Windows.

Ricordare che i nomi e gli identificatori di cultura rappresentano solo un sottoinsieme di culture che è possibile trovare su un determinato computer. Le versioni di Windows oi service pack possono modificare le culture disponibili. Le applicazioni aggiungono culture personalizzate utilizzando la classe CultureAndRegionInfoBuilder. Gli utenti aggiungono le proprie culture personalizzate utilizzando lo strumento Microsoft Locale Builder. Microsoft Locale Builder è scritto nel codice gestito utilizzando la classe CultureAndRegionInfoBuilder.

Se si desidera un formato di essere statico, è possibile costruire il proprio oggetto CultureInfo e personalizzare il comportamento di esso, l'impostazione your own Date Time format, come esempio