2017-02-23 10 views
-1

ありがとうございます。ParseException:解析不能な日付例外

システムのデフォルトロケールの違い。

SimpleDateFormat sdf = new SimpleDateFormat( "MMM d、yyyy h:mm:ss a"、Locale.ENGLISH);

解決されました。日付エラー

Stringに

文字列:などFeb 13, 2017 10:25:43 AM

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy h:mm:ss a"); 

またはMMM d, yyyy h:mm:ss aMMM d, yyyy hh:mm:ss aMMM dd, yyyy h:mm:ss aMMM dd, yyyy hh:mm:ss aMMM dd, yyyy H:mm:ss aMMM dd, yyyy HH:mm:ss a ...

はParseException :::: :分かりにくい日付: "Feb 13、2017 10:25:43 AM"

plz help。

+3

[IdeOne.comのライブコード(http://ideone.com/B9SzGo)]でわかるように動作します。この質問を再現不可能なものとして閉じる**への投票**。これらの面倒な古いレガシー日時クラスではなく、java.timeクラスを使用する必要があります。 –

+0

ここに問題はありません – MadProgrammer

+0

システムのデフォルトのロケールは何ですか?ありがとう。 –

答えて

-3

これを試してください。

Date dNow = new Date(); 
      SimpleDateFormat ft = new SimpleDateFormat(
        "E yyyy.MM.dd 'at' hh:mm:ss a zzz"); 

      System.out.println("Current Date: " + ft.format(dNow)); 
      String CurrentTime = ft.format(dNow); 
+2

**無関係な回答**質問は*文字列を生成するのではなく*文字列を解析することに関するものです。 –

0

TL; DR

LocalDateTime.parse( 
    "Feb 13, 2017 10:25:43 AM" , 
    DateTimeFormatter.ofPattern("MMM d, uuuu hh:mm:ss a" , Locale.US) 
) 

2017-02-13T10:25:43

java.time

あなた面倒古い日時のクラスを使用しています今は伝統的で、java.timeクラスに取って代わりました。

入力に一致する書式設定パターンを指定します。月などの名前の翻訳に使用される人間の言語および文化的規範を指定するには、Localeを渡すことに注意してください。

String input = "Feb 13, 2017 10:25:43 AM" ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern("MMM d, uuuu hh:mm:ss a" , Locale.US) ; 

入力文字列には、タイムゾーンまたはUTCオフセットがありません。したがって、LocalDateTimeとして解析します。

LocalDateTime ldt = LocalDateTime.parse(input , f ); 

ldt.toString():2017-02-13T10:25:43

ところで、あなたの入力は年後にコンマを持っていた場合、あなたは使用して解析されている可能性がフォーマットパターンを定義するのではなく、自動的にローカライズされたフォーマッタです。そのコンマは、明らかに米国の標準です(少なくとも)。

String input = "Feb 13, 2017, 10:25:43 AM" ; // With a comma after year, apparently the norm in the United States. 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.US) 
LocalDateTime ldt = LocalDateTime.parse(input , f ); 

についてjava.time

java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.DateCalendar、& SimpleDateFormatなどの面倒な古いlegacy日時クラスに取って代わります。

maintenance modeにあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。

詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。

java.timeオブジェクトをデータベースと直接交換することができます。 JDBC 4.2以降に準拠するJDBC driverを使用してください。文字列の必要はなく、java.sql.*クラスは不要です。

ここで、java.timeクラスを取得するには?

  • Java SE 8Java SE 9、以降
    • 内蔵しています。
    • バンドルされた実装の標準Java APIの一部です。
    • Java 9には、いくつかのマイナーな機能と修正が加えられています。
  • Java SE 6Java SE 7
    • java.time機能の多くはThreeTen-BackportのJava 6 & 7に戻って、移植されます。
  • Android
    • java.timeクラスのAndroidのバンドル実装以降のバージョン。
    • 以前のAndroidの場合、ThreeTenABPプロジェクトはThreeTen-Backport(上記)に適合しています。 How to use ThreeTenABP…を参照してください。

ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、IntervalYearWeekYearQuartermoreなどの便利なクラスがあります。

関連する問題