2016-04-10 15 views
0

これは20160407 4:30 pmデータ時間文字列であり、タイムスタンプに転送したいと思います。Javaの解析不可能な日付例外yyyyMMdd h:m a

Timestamp timestamp = null; 
try { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd h:m a"); 
    //SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
    Date parsedDate = dateFormat.parse("20160407 4:30 pm"); 
    timestamp = new java.sql.Timestamp(parsedDate.getTime()); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

私はエラーを得た:私は、ロケールを指定しない場合、私は、米国およびコード内で現在てる

java.text.ParseException: Unparseable date: "20160407 4:30 pm " 
+3

Java 8でうまく動作します。あなたのロケールは何ですか?おそらく 'pm'はあなたのロケールで' pm'と言うのではないでしょうか。デフォルトのロケールの代わりにLocale.USを試してください。また、例外の完全なスタックトレースを送信します。 –

+0

@JBNizetあなたに同意します。ローカルをチェックする必要があります。 –

答えて

4

が細かい実行されます。しかし、中国語で明示的にロケールを中国に変更したのと同じ例外が発生しました。私は、「pm」に「下午」を、「am」に「上午」を使用しています。それはその後動作します。

Locale locale = Locale.CHINA; 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd h:m a", locale); 

Date parsedDate = dateFormat.parse("20160407 4:30 pm"); 

だからあなたのデフォルトのロケールがLocale locale = Locale.getDefault()であるかどうか確認してください。

さらに、新しいJavaの日付と時刻のAPIを使用することをお勧めします。

+0

ロケールのデフォルトではない場合でも、フォーマッタクラスは指定したパターンを使用します。私はこれを投票する理由はないと思う。 – duffymo

+1

@duffymoええ、そうです、そして、このロケールでは失敗するかもしれないので、誤りがあります。 [カスタマイズ・フォーマット](https://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html) –

+1

@duffymo文字列を解析しようとしているので解析中にエラーが発生しました日付として、中国の文字列 –

関連する問題