Ответ 1
попробуйте
SimpleDateFormat dt1 = new SimpleDateFormat("MMMM yyyy");
Следующий код:
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()));
После развертывания на сервере отображается следующее исключение:
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)
На моем локальном хосте я использую JDK v1.8
, и приведенный выше код работает отлично, но на сервере он не работает.
Как я могу это решить?
попробуйте
SimpleDateFormat dt1 = new SimpleDateFormat("MMMM yyyy");
На вашем локальном компьютере вы можете использовать Java 8, поэтому проверьте версию Java на своем сервере. Если он меньше Java 7, капитал Y
не будет работать.
Обратитесь к Java 6 Документация Oracle для SimpleDateFormat
Вы должны написать Y
за год в маленьком не в столицах.
Как и для двухзначного года:
SimpleDateFormat dt1 = new SimpleDateFormat("yy");
И для четырехзначного года:
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy");
Если вы используете Java 7 или выше:
Вы можете использовать капитал Y
, который представляет Week Year
.
Обратитесь к Java 7 Oracle Docs SimpleDateFormat
В соответствии с javadocs
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().
Таким образом, единственная проблема заключается в том, что ваша версия java < 1.7, потому что JRE1.7 добавил шаблон "Y" для Недельного года, а в JRE1.6 для этого нет шаблона.
Или просто оставайтесь на более безопасной стороне y
вместо y
.
Еще одна вещь всегда пытается использовать локаль на более безопасной стороне
SimpleDateFormat dt1 = new SimpleDateFormat("MMMM yyyy",java.util.Locale.ENGLISH);
Документация отличается от реализации. Поддерживаемые символы определяются в строковой константе в SimpleDateFormat
до уровня API 23. Из исходного кода:
static final String PATTERN_CHARS = "GyMdkHmsSEDFwWahKzZLc";
Так как "Y" (Week Year) не включен, проверка шаблона генерирует исключение:
java.lang.IllegalArgumentException: Unknown pattern character 'Y'
Быстрое исправление, когда поведение в течение недели не требуется, заключается в использовании "y", например: yyyy-MM-dd
.
"Y" в качестве символа шаблона поддерживается с уровня API 24.
От java.text.SimpleDateFormat:
Letter Date or Time Component Presentation Examples
y Year Year 1996; 96
Y Week year Year 2009; 09
Вы запрашиваете Week year
вместо year
при вызове SimpleDateFormat()
Я взял эту таблицу из 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
В вашем случае просто замените "Y" на "y" вы можете увидеть Документы здесь