Java.lang.IllegalArgumentException: caractère de motif illégal "Y" pour SimpleDateFormat

Le code suivant:

Calendar now = Calendar.getInstance();
month = now.get(Calendar.MONTH) + 1;
year = now.get(Calendar.YEAR);
System.out.println("Month " + month + " year " + year);
SimpleDateFormat dt1 = new SimpleDateFormat("MMMM YYYY");
e.setMonthnYear(dt1.format(now.getTime()));

Après le déploiement sur le serveur est de montrer exception suivante:

java.lang.IllegalArgumentException: Illegal pattern character 'Y'
    java.text.SimpleDateFormat.compile(SimpleDateFormat.java:768)
    java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:575)
    java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:500)
    java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:475)
    iland.employee.EmployeeAction.fetchAllAtted(EmployeeAction.java:169)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)

sur mon hôte local j'utilise JDK v1.8 et le code ci-dessus fonctionne parfaitement, mais sur le serveur il ne fonctionne pas.

comment résoudre ce problème?

24
demandé sur Kamran Ahmed 2014-08-16 09:31:35

6 réponses

SimpleDateFormat dt1 = new SimpleDateFormat("MMMM yyyy");
24
répondu Evgeniy Dorofeev 2017-11-01 09:45:55

sur votre Local vous utilisez peut-être Java 8, alors vérifiez la version de Java sur votre serveur. Si elle est inférieure à Java 7 de la capitale Y ne fonctionne pas.

référez-vous à Java 6 Oracle Docs pour SimpleDateFormat

Vous devez écrire Y pour l'année en petites et non en capitales.

Comme pour les 2 chiffres de l'année:

 SimpleDateFormat dt1 = new SimpleDateFormat("yy");

et pour l'année à 4 chiffres:

 SimpleDateFormat dt1 = new SimpleDateFormat("yyyy");

dans le cas où vous utilisez Java 7 ou plus haut: Vous pouvez utiliser l' capital Y représente Week Year.

reportez-vous à Oracle Java 7 Docs SimpleDateFormat

7
répondu Mandar Pandit 2014-08-16 05:59:18

selon le javadoc

If week year 'Y' is specified and the calendar doesn't support any week years,
the calendar year ('y') is used instead. The support of week years can be tested
with a call to getCalendar().isWeekDateSupported().

donc le seul problème est guess est votre version de java < 1.7 parce que JRE1.7 a ajouté le modèle " Y " pour la semaine de l'année et en JRE1.6 il n'y a pas de modèle pour cela.

Ou tout simplement rester sur le côté plus sûr d'utiliser y au lieu de Y.

une chose de plus essayez toujours d'utiliser locale pour être du côté plus sûr

SimpleDateFormat dt1 = new SimpleDateFormat("MMMM yyyy",java.util.Locale.ENGLISH);
6
répondu SparkOn 2014-08-16 07:39:59

Android

documentation diffère de la mise en œuvre. Les caractères pris en charge sont définis à une constante de chaîne SimpleDateFormat jusqu'au niveau API 23. À partir de la code source:

static final String PATTERN_CHARS = "GyMdkHmsSEDFwWahKzZLc";

Depuis le " Y " (Semaine de l'Année) n'est pas inclus, le modèle de validation déclenche l'exception:

java.lang.IllegalArgumentException: Unknown pattern character 'Y'

une solution rapide, lorsque le comportement de l'année de la semaine n'est pas requis, est d'utiliser le "y", par exemple: yyyy-MM-dd.

' Y ' comme motif le caractère est supporté à partir du niveau 24 de L'API.

mise à Jour

documentation liste maintenant les niveaux D'API supportés pour les caractères de pattern.

2
répondu aruh 2018-03-29 13:46:44

j'ai pris cette table de java docs.

Letter  Date or Time Component  Presentation    Examples
G   Era designator  Text    AD
y   Year    Year    1996; 96
M   Month in year   Month   July; Jul; 07
w   Week in year    Number  27
W   Week in month   Number  2
D   Day in year Number  189
d   Day in month    Number  10
F   Day of week in month    Number  2
E   Day in week Text    Tuesday; Tue

Dans votre cas, il suffit de remplacer"Y" pour "y" vous pouvez voir Docs ici

1
répondu jaimin 2014-08-16 06:36:30

java.texte.SimpleDateFormat:

Letter  Date or Time Component  Presentation    Examples 
y       Year                    Year            1996; 96
Y       Week year               Year            2009; 09

demander Week year au lieu de year dans votre SimpleDateFormat()

0
répondu DavidPostill 2014-08-16 05:47:02