java.lang.IllegalArgumentException:非法模式字符' e'在java webapp中

时间:2017-07-21 05:42:59

标签: java tomcat

我有一个在tomcat 7.0.48中运行的java webapp,它在我的电脑(Ubuntu 16.04 LTS)中正常运行,但是在服务器上(Debian Squeeze),当我执行一个动作时它会给出这个异常:

java.lang.IllegalArgumentException: Illegal pattern character 'e'
        at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:826)
        at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:634)
        at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:605)
        at com.opensymphony.webwork.components.Date.end(Date.java:307)
        at com.opensymphony.webwork.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:21)
       ...

1 个答案:

答案 0 :(得分:1)

查看SimpleDateFormat的模式。如果它的格式是(“eee,dd.MMM yyyy”),则将其更改为(“EEEE,dd.MMM yyyy”)。

由于您尚未发布代码,因此以下是产生错误的示例。

  public static void main(String[] args) throws ParseException {

   String date = new SimpleDateFormat("eee, dd. MMM yyyy").format(new SimpleDateFormat("yyyy-MM-dd").parse("2017-07-21"));

}

如果您将运行上述程序,则会出现以下错误。 线程“main”中的异常java.lang.IllegalArgumentException:非法模式字符'e'

要解决此问题,您必须通过将字母e。

大写来修改模式
   String date = new SimpleDateFormat("EEEE, dd. MMM yyyy").format(new SimpleDateFormat("yyyy-MM-dd").parse("2017-07-21"));

此外,请查看此处的文档,https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html然后在日期和时间模式部分,它说:

日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,从“A”到“Z”和从“a”到“z”的不带引号的字母被解释为表示日期或时间字符串的组成部分的模式字母。可以使用单引号(')引用文本以避免解释。 “''”代表单引号。不解释所有其他字符;它们只是在格式化过程中被复制到输出字符串中,或​​者在解析过程中与输入字符串匹配。

如文档中所述,未引用的字母将被视为模式字母。如果你不希望它被视为模式,那么只需用引号('e')包围字母e。

以下是演示。假设我想打印当前日期,然后是字母e,然后是当前时间,然后我可以执行以下操作。

  SimpleDateFormat f =
            new SimpleDateFormat("yyyy.MM.dd 'e' hh.mm.ss", Locale.ENGLISH);
    System.out.println(f.format(new Date()));

运行上述程序会得到以下输出。

2017.07.21 e 12.38.39

如果您将取消引用字母e,那么您将获得 java.lang.IllegalArgumentException:非法模式字符'e'

更新:字母E用于表示星期几。如果您还想打印白天时间,请使用它。

SimpleDateFormat f =
                new SimpleDateFormat("yyyy.MM.dd EEEE hh.mm.ss zzz", Locale.ENGLISH);
        System.out.println(f.format(new Date()));

O / P:2017.07.21 Friday 12.53.58 NPT

如果用E替换EEEE,那么输出将是

O / P:2017.07.21 Fri 12.53.58 NPT