以下代码:
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
并且上面的代码运行正常,但在服务器上它无效。
我该如何解决这个问题?
答案 0 :(得分:44)
尝试
SimpleDateFormat dt1 = new SimpleDateFormat("MMMM yyyy");
答案 1 :(得分:21)
在您的Local上,您可能正在使用Java 8,因此请检查服务器上的Java版本。如果它小于Java JDK 7,则大写Y
将不起作用。
请参阅Java {6}文档SimpleDateFormat
您必须以小y
编写年份而不是大写Y
。
喜欢2位数年份:
SimpleDateFormat dt1 = new SimpleDateFormat("yy");
4位数年份:
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy");
如果您使用的是Java 7或更高版本:
您可以使用代表Y
的大写Week Year
。
请参阅Java 7 Oracle Docs SimpleDateFormat
答案 2 :(得分:6)
根据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版本&lt; 1.7因为 JRE1.7添加了“Y&#39;周年和JRE1.6的模式没有模式。
或者只使用y
而不是Y
来保持更安全的一面。
还有一件事总是尝试使用区域设置在更安全的一面
SimpleDateFormat dt1 = new SimpleDateFormat("MMMM yyyy",java.util.Locale.ENGLISH);
答案 3 :(得分:4)
documentation与实施不同。受支持的字符在SimpleDateFormat
中的字符串常量中定义,最高为API级别23.来自source code:
static final String PATTERN_CHARS = "GyMdkHmsSEDFwWahKzZLc";
由于未包含'Y'(周年),模式验证会抛出异常:
java.lang.IllegalArgumentException: Unknown pattern character 'Y'
快速修复,当不需要周年行为时,使用'y',例如:yyyy-MM-dd
。
'Y'作为模式字符。
documentation现在列出了支持的模式字符API级别。
答案 4 :(得分:2)
我从java文档中获取此表。
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
在您的情况下,只需更换&#34; Y&#34;到&#34; y&#34; 你可以看到Docs here
答案 5 :(得分:0)
Letter Date or Time Component Presentation Examples
y Year Year 1996; 96
Y Week year Year 2009; 09
在致电Week year
year
代替SimpleDateFormat()