TLみてください。
ZonedDateTime.parse (
"Mon Apr 03 16:49:56 PDT 2017" ,
DateTimeFormatter.ofPattern ("EEE MMM dd HH:mm:ss z uuuu", Locale.US)
)
DRを
構文
申し訳ありませんが、私はGroovyの構文を知らないので、これはJava構文です。
java.util.Date::toString
あなたは値がjava.util.Date::toString
を呼び出すことにより、テキストデータ型としてデータベースに保存されたことを言っていますか?
これで、java.util.Date::toString
などのデフォルトの形式で、Mon Apr 03 16:49:56 PDT 2017
などの文字列を解析して日付/時刻オブジェクトに戻す必要があります。
まず、日時の値を保存するのは恐ろしい方法であることを既に知っていなければなりません。そのフォーマットは英語を前提とし、小数点以下は切り捨てます。そのフォーマットは人間が読むのが難しく、機械では解析が難しい。それはPDT
またはIST
のような真のタイムゾーンではなく、標準化されておらず、ユニークではない(!)のような擬似タイムゾーンの3〜4文字の略語を使用します。例えば、America/Montreal
,Africa/Casablanca
またはPacific/Auckland
のようなcontinent/region
のフォーマットのProper time zone nameである。
ISO 8601
日時の値をシリアル化するときにその代わりに、標準ISO 8601形式を使用しています。
java.timeクラスは、デフォルトで文字列の解析と生成時に標準ISO 8601の形式を使用します。
避けレガシー日時クラス
java.util.Date
は、Javaの最初のバージョンにバンドルされて面倒な下手に設計された紛らわしい古い日付時刻クラスの一つであることを知っています。これらのクラスは現在、古典的であり、java.timeクラスに取って代わりました。レガシークラスを避け、代わりにjava.timeを使用してください。
はjava.time
を使用DateTimeFormatter
クラスは文字列を解析します。 Date::toString
の出力に一致する書式設定パターンを定義する必要があります。
String input = "Mon Apr 03 16:49:56 PDT 2017" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern ("EEE MMM dd HH:mm:ss z uuuu", Locale.US) ;
これで文字列をZonedDateTime
として解析できます。
ZonedDateTime zdt = ZonedDateTime.parse (input, f) ;
zdt.toString():2017-04-03T16:49:56から07:00 [アメリカ/ Los_Angeles】一般
の日付・時刻の値をシリアル化するためのベストプラクティスデータの格納と交換は、UTCで値を保持し、標準ISO 8601形式の文字列を作成することです。 ISO 8601のUTCの規則は、Zulu
の略でUTCを意味するZ
を追加することです。
Instant
クラスは、nanoseconds(小数点以下9桁まで)の解像度を持つUTCのタイムライン上の瞬間を表します。
Instant instant = zdt.toInstant() ;
String output = instant.toString() ;
instant.toString():2017-04-03T23:49:56Zは
JDBC
ご質問やコメントは明確ではありません。値が適切な日時型を使用してデータベースに格納されている場合は、上で説明したように文字列を混乱させる必要はありません。適切に格納されている場合は、必要に応じて変換しながら、JDBCドライバーにデータベース内外のデータをフェッチする作業をさせる必要があります。
JDBC 4.2以降に準拠するドライバは、PreparedStatement::setObject
およびResultSet::getObject
でjava.time型を直接使用できます。
javaについて時間
java.timeフレームワークはJava 8以降に組み込まれています。これらのクラスは、java.util.Date
、Calendar
、& SimpleDateFormat
など、面倒な古いlegacy日時クラスに取って代わります。
maintenance modeにあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。
Oracle Tutorialを参照して、詳細をご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。
ここで、java.timeクラスを取得するには?
ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、Interval
、YearWeek
、YearQuarter
、moreなどの便利なクラスがあります。
私はあなたの質問には従いませんが、Javaで行うことができると思われる場合は、Javaの抜粋が有効なGroovyであるためGroovyで実行することもできます。 'Date.parse( 'h:mm a MMMM dd、yyyy'、 '2007年6月27日6:31 PM') ' – bdkosher
より普遍的なアプローチはありますか?つまり、日付がデータベースに 'MM-d-yyyy-h-mm-s'の形式で保存されているとします。Date.parseを使用して日付を新しい形式で印刷するにはどうすればよいですか? –
日付はデータベースに文字列として保存されていますか? –