Ubuntu上的非法模式字符'Y'

Posted

技术标签:

【中文标题】Ubuntu上的非法模式字符\'Y\'【英文标题】:Illegal pattern character 'Y' on UbuntuUbuntu上的非法模式字符'Y' 【发布时间】:2012-05-21 13:02:28 【问题描述】:

我在 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 中可以工作但在 Ubuntu 中如果我使用“Y”而不是“y”则无法工作的原因?

注意:

    Play-1.2.3 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)
    Windows 7 Ubuntu 10.04

2012 年 5 月 24 日更新

在我再次检查我的系统后,有 3 个 JRE,我的窗口默认使用 JRE1.7。但是对于 Play,我使用 JRE1.6 设置运行。

【问题讨论】:

因为 Ubuntu 实现遵循 API 文档?如果不深入研究来源,这可能只是一个意见答案,但其他人可能知道更多。 【参考方案1】:

我搜索 SimpleDateFormat 并从 oracle 获得 doc。

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

因此在 Windows 上工作,JRE1.7 为 Week year 添加了“Y”模式,而在 JRE1.6 中没有此模式。

【讨论】:

【参考方案2】:

Y 不是有效模式。 y 是。

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

我不知道为什么Y 会在 Windows 中工作,但它没有记录。 y 是正确的。也是最安全的。

【讨论】:

可能是因为我使用的 JRE 不同?对于 Windows,我使用 Oracle 的 JRE,但不确定我的 Ubuntu 是否使用相同的 JRE,因为另一个人为我安装。 @Crazenezz - 运行java -version @StephenC:谢谢,添加一些关于 JRE 的注释

以上是关于Ubuntu上的非法模式字符'Y'的主要内容,如果未能解决你的问题,请参考以下文章

501方法未实现 - URLDecoder:转义(%)模式中的非法十六进制字符 - 对于输入字符串:“u2”

java编程为啥提示“非法字符uff1b”?

PHP:转义 .ini 文件中的非法字符

索引1处片段中的非法字符:Heroku上的#{systemEnvironment ['DATABASE_URL']}配置数据源

maven编译工程时出现非法字符: 65279错误

为啥我在模式匹配中得到非法模式?