2017-07-21 7 views
-1

Tomcat 7.0.48で実行されているJava Webアプリケーションがあり、通常は自分のPC(Ubuntu 16.04 LTS)で動作しますが、サーバー(Debian Squeeze)アクションを実行すると、この例外が発生します。java.lang.IllegalArgumentException:javaのwebappで不正なパターン文字「

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

['SimpleDateFormat'](https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html)パターン? – Andreas

+0

私はこのコードを作っていない、私はそれを維持しなければならないとドキュメントがありますが、私はSimpleDateFormの使用を検索し、私は文字 'e'を使用して見つけることができません。 –

+0

stacktraceはJSPタグ(おそらく ' ')の処理中に失敗したことを示しています。そのため、その不正なフォーマット文字列をJSPで調べる必要があります。 – Andreas

答えて

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")); 

} 

上記のプログラムを実行すると、次のエラーが発生します。スレッド「メイン」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をUNQUOTEます場合は、あなたが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になります:あなたは、文字 `e`がで行うことを期待していなかった何2017.07.21 Fri 12.53.58 NPT