Abbiamo iniziato a riscontrare un bizzarro errore nell'ambiente di produzione di recente (gli ambienti di test funzionano correttamente).java dateformat carattere modello non valido 'y'
java.lang.IllegalArgumentException: illegale carattere del modello 'y'
Ciò è causato dalla seguente codice
SimpleDateFormat dateFormat = (SimpleDateFormat)DateFormat.getDateInstance();
dateFormat.applyLocalizedPattern("yyyy-MM-dd");
Questo errore è normalmente generata quando per esempio con 'Y' invece di 'y ' per anno. Questo non è il caso qui come puoi vedere sopra. Non sono sicuro al 100% della locale impostata sul server. Linux env LANG è impostato su "de_DE.UTF_8", quindi probabilmente è usato.
Inserendo il codice sorgente di SimpleDateFormat.java ho trovato il metodo translatePattern(String pattern, String from, String to)
. Ciò genera l'eccezione menzionata quando nessun carattere in pattern
non esiste in da. I valori si presenta come questo durante il debug localmente su un computer diverso
modello = "yyyy-MM-dd"
from = "GyMdkHmsSEDFwWahKzZ"
Da l'eccezione sul server, è evidente che il primo 'y 'non esiste in from
. from
viene prelevato da formatData.getLocalPatternChars()
, che è un DateFormatSymbols
inizializzato dalla locale sul server.
Sono disponibili anche versioni locali che potrebbero avere formati senza 'y'? Questo errore si è verificato senza alcuna modifica del codice e, a mia conoscenza, nessuna modifica della configurazione del server.
Qual è la JVM precisa in cui si esegue? –
java.vm.specification.vendor: Sun Microsystems Inc. java.runtime.version: 1.6.0_37-b06 –
Ed è identico a quello in esecuzione nel test? –