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.Date
、Calendar
、& 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クラスを取得するには?
ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、Interval
、YearWeek
、YearQuarter
、moreなどの便利なクラスがあります。
[IdeOne.comのライブコード(http://ideone.com/B9SzGo)]でわかるように動作します。この質問を再現不可能なものとして閉じる**への投票**。これらの面倒な古いレガシー日時クラスではなく、java.timeクラスを使用する必要があります。 –
ここに問題はありません – MadProgrammer
システムのデフォルトのロケールは何ですか?ありがとう。 –