以下代码:
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()));
Run Code Online (Sandbox Code Playgroud)
在服务器上部署后显示以下异常:
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)
Run Code Online (Sandbox Code Playgroud)
在我使用的本地主机上JDK v1.8,上面的代码工作正常,但在服务器上它无法正常工作.
我该如何解决这个问题?
Evg*_*eev 55
尝试
SimpleDateFormat dt1 = new SimpleDateFormat("MMMM yyyy");
Run Code Online (Sandbox Code Playgroud)
Man*_*dit 29
在本地,您可能正在使用Java 8,因此请检查服务器上的Java版本.如果它小于Java JDK 7,则资本Y将无效.
请参阅Java 6 Oracle Docs for SimpleDateFormat
你必须写一个小y而不是大写的年份Y.
喜欢2位数年份:
SimpleDateFormat dt1 = new SimpleDateFormat("yy");
Run Code Online (Sandbox Code Playgroud)
而对于4位数年份:
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy");
Run Code Online (Sandbox Code Playgroud)
如果您使用的是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().
Run Code Online (Sandbox Code Playgroud)
因此唯一的问题是猜测你的java版本是否为1.7 <1.7因为JRE1.7为周年添加了'Y'模式而在JRE1.6中没有添加模式.
或者只是保持更安全的一面使用y而不是Y.
还有一件事总是尝试使用locale更安全的一面
SimpleDateFormat dt1 = new SimpleDateFormat("MMMM yyyy",java.util.Locale.ENGLISH);
Run Code Online (Sandbox Code Playgroud)
该文档与实现不同。受支持的字符在SimpleDateFormat最高API级别23 的字符串常量中定义。从源代码:
static final String PATTERN_CHARS = "GyMdkHmsSEDFwWahKzZLc";
Run Code Online (Sandbox Code Playgroud)
由于不包括“ Y”(周年),因此模式验证会引发异常:
java.lang.IllegalArgumentException: Unknown pattern character 'Y'
Run Code Online (Sandbox Code Playgroud)
如果不需要星期的行为,一种快速的解决方法是使用'y',例如: yyyy-MM-dd。
从API级别24开始,支持'Y'作为模式字符。
现在,文档列出了模式字符支持的API级别。
| 归档时间: |
|
| 查看次数: |
33569 次 |
| 最近记录: |