2016-07-07 33 views
6

In Australia, un cliente ha inserito "1/5" come scorciatoia per il primo giorno di maggio. Abbiamo appena spostato da Windows Server 2008 a Windows Server 2012.DateTimeFormatInfo.MonthDayPattern è cambiato in Windows Server 2012 - Come posso ripristinarlo?

utilizzando il seguente codice in LINQPad:

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-au", false); 
System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthDayPattern.Dump(); 
DateTime.Parse("1/5").Dump(); 

Su Windows Server 2008:

dd MMMM

1/05/2016 12:00 AM

Su Windows Server 201 2 R2:

MMMM d

5/01/2016 12:00:00 AM

Domande:

  1. Perché ha cambiato il MonthDayPattern? Gli australiani hanno sempre il giorno prima, poi il mese
  2. Dove può essere impostato nell'interfaccia utente di Windows Server? L'interfaccia utente espone solo i formati lungo e corto, non il formato giorno e mese
  3. Come posso risolvere il problema nella mia applicazione con il minor numero di modifiche, dato che potrebbe verificarsi DateTime.Parse attraverso il sistema (ad esempio Modello binding, convalida ecc)
+0

Quale versione di Linqpad stai utilizzando? – Mick

+0

4, non abbiamo .Net 4.6 sul server in modo non è possibile utilizzare 5 – user917170

risposta

2

posso replicare il problema in Windows Server 2012. Se si aggiunge ...

System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortDatePattern.Dump(); 

vedrete che ritorna ...

d/MM/aaaa

È solo il MonthDayPattern che sembra non essere corretto. Questo potrebbe essere un bug. Vorrei registrare il problema su https://connect.microsoft.com/.

Nel frattempo si potrebbe semplicemente impostare il MonthDayPattern ....

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-au", false); 
System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortDatePattern.Dump(); 
System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthDayPattern.Dump(); 
DateTime.Parse("1/5").Dump(); 
System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthDayPattern = "d MMMM"; 
DateTime.Parse("1/5").Dump(); 

In Windows Server 2012 R2:

d/MM/yyyy

MMMM d

2016/05/01 12:00:00

1/05/2016 12:00 AM

+0

Penso che lei ha ragione, la soluzione più semplice è quello di impostare il formato di noi stessi sul filo.Ancora non spiega perché il problema esiste, quindi solleverò un problema su connect .... – user917170

+0

Hey @ user917170 - hai mai sentito qualcosa da Microsoft a riguardo? Ho appena trovato un problema molto simile. Il mio server passa da gg MMMM a d MMMM che ha reso il bug ancora più casuale e confuso ... – kirbatious