在Ubuntu上出现了非法的模式字符'Y'

13
我在Windows系统下使用SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");这种格式是可行的,但是在Ubuntu 10.04中运行时会出现异常:play.exceptions.JavaExecutionException: Illegal pattern character 'Y'。我搜索了解决方案,发现年份模式必须更改为小写:SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");才能正常工作。 有谁能告诉我为什么在Windows中使用'Y'而在Ubuntu中使用'y'时不起作用的原因? 注意:
1. Play-1.2.3
2. JRE: - Windows: java version "1.7.0_03" Java(TM) SE Runtime Environment (build 1.7.0_03-b05) Java HotSpot(TM) Client VM (build 22.1-b02, mixed mode, sharing) - Ubuntu: java version "1.6.0_31" Java(TM) SE Runtime Environment (build 1.6.0_31-b04) Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode) 3. Windows 7
4. Ubuntu 10.04 更新于 2012 年 5 月 24 日: 我再次检查我的系统,发现有 3 个 JRE,我的 Windows 默认使用 JRE1.7。但是对于 Play,我设置了使用 JRE1.6 运行。

4
因为Ubuntu的实现遵循API文档?不深入源代码进行分析,这可能只是一种个人意见,但也许其他人知道得更多。 - Dave Newton
2个回答

21

我搜索了SimpleDateFormat,并从oracle获得了文档

在我的Windows上工作是因为我将默认的JRE设置为1.7,但仍然在Play Framework中使用JRE1.6运行。

输入图像描述

这在Windows上可以工作,因为JRE1.7添加了“Y”模式用于周年份,而在JRE1.6中没有此模式。


14

Y 不是一个有效的模式,y 是。

根据文档

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
...

我不知道为什么在Windows中使用Y会有效,但这并没有被记录在案。 y 是正确的,并且更安全。


这可能是因为我使用了不同的JRE吗?在Windows上,我使用的是来自Oracle的JRE,但不确定我的Ubuntu是否使用相同的JRE,因为另一个人替我安装了。 - Crazenezz
1
@Crazenezz - 运行 java -version - Stephen C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接