私がしようと試みるが、私はかなり私の簡単な問題の解決策を見つけることができるようにないよう驚いてきました。
私はこのような値を持つ日付変数を持っています:
res0: java.util.Date = Mon Jul 15 07:50:59 AET 2019
今私は日付部分ではない時間が欲しいです。このようの日付で利用可能な機能が廃止されました。そして私が見つけたすべてのソリューションは、今日の日時を取得してSimpleDateFormatを使用して文字列に変換するカレンダーのインスタンスを使用していました。
私は、文字列を望んでいません。私は、日付部分のない時間部分なしで日付と時刻をしたいです。
TL; DR
myJavaUtilDate
.toInstant()
.atZone(
ZoneId.of( "Australia/Sydney" )
)
.toLocalDate()
時刻のみの場合、日付のないとタイムゾーンなし:
.toLocalTime()
文字列を生成するには、呼び出し:
.format(
DateTimeFormatter
.ofLocalizedDate( FormatSyle.MEDIUM )
.withLocale( new Locale( "en" , "AU" ) )
)
細部
すぐに変換しjava.util.Date
、そのレガシークラスから現代の交換にInstant
。
Instant instant = myJavaUtilDate.toInstant() ;
これらのクラスの両方があるUTCに見られるような瞬間を表し、ゼロ時間・分・秒のオフセット。日付を認識したいことでタイムゾーンに調整します。
1日の時間の任意の時点と日付の両方のために、世界中の時間帯によって異なります。パリの正午には、モントリオールの正午ではありません。西よりも東で以前と新しい日の明けます。これは、適切な日付と時刻の処理を行うためにあなたは非常に明確に取得する必要があります。自然の中で一つの瞬間には、タイムゾーンの人間が作成した概念を通じて、多くの方法で表示することができます。
指定適切なタイムゾーン名をの形式でcontinent/region
、のようなAmerica/Montreal
、Africa/Casablanca
またはPacific/Auckland
。など3-4 letter擬似ゾーンを使用しないでくださいAET
、EST
またはIST
彼らがそうであるようにではない、真のタイムゾーン、標準化されていない、と(!)にも固有のものではありません。
ZoneId z = ZoneId.of( "Australia/Sydney" ) ;
適用しますInstant
取得しますZonedDateTime
。どちらも同じ同時瞬間を表すが、異なる壁時計時間で表示されます。
ZonedDateTime zdt = instant.atZone( z ) ;
日付部分だけを抽出します。
LocalDate ld = zdt.toLocalDate() ;
時刻部分を抽出します。
LocalTime lt = zdt.toLocalTime() ;
再びそれらを一緒に入れてください。
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
あなたが必要な場合はjava.util.Date
、再びまだに更新されていない古いコードと相互運用するjava.time、変換。
Date d = Date.from( zdt.toInstant() ) ;