既存のjava.util.Dateオブジェクトとは別に、時間と日付の部分を取得する方法

シンプルフェロー:

私がしようと試みるが、私はかなり私の簡単な問題の解決策を見つけることができるようにないよう驚いてきました。

私はこのような値を持つ日付変数を持っています:

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/MontrealAfrica/CasablancaまたはPacific/Aucklandなど3-4 letter擬似ゾーンを使用しないでくださいAETESTまたは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() ) ;

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=317746&siteId=1