2016-10-24 13 views
1

java.time.temporal.Temporalインスタンスをjava.util.Dateインスタンスに変換するにはどうすればよいですか?java.temporal.Temporal.Temporalをjava.util.Dateに変換する

java.time.temporal.Temporal someTemporal = Instant.now(); 
java.util.Date some Temporal = x(someTemporal); 

私はOracle's legacy time trail documentationを見ましたが、適合する解決策を見つけることができませんでした。底部では

+2

'Temporal'型は非常に一般的で抽象的であるため、解を見つけることは不可能です。つまり、java.util.Dateへの変換です。たとえば、LocalDate型を考えてみましょう。どのようにタイムゾーンや時計のようなコンテキスト情報なしでそれを変換することができますか? –

+1

しかし、単に 'java.time.Instant'を変換したいのであれば、それはかなりシンプルです。 'java.util.Date'のAPIを見てください。 (メソッド 'from(インスタント)'参照)。 –

答えて

-1

ことがあります。

java.time.format.DateTimeFormatterは、日付と時刻の値をフォーマットするための強力なメカニズムを提供しますが、あなたも直接java.time、時間ベースのクラスを使用することができますjava.util.FormatterとString.formatを使用して、java.utilの日付と時刻のクラスで使用するのと同じパターンベースの書式を使用します。

あなたがdocumentation hereで、てDateTimeFormatterクラスを使用すると、おそらくこの例のようなもので行くことのように見えます:

LocalDate date = LocalDate.now(); 
String text = date.format(formatter); 
LocalDate parsedDate = LocalDate.parse(text, formatter); 
+2

私は質問が書式設定についてではないと思う。 –

+0

@MenoHochschild右、私の答えは、Date形式であり、java.util.Dateオブジェクトに変換できるLocalDateを提供します。 –

+1

@TrevorYokum質問はjava.util.Dateに変換することを求めています。あなたの答えはそれとは関係ありません... – assylias

4

私は強く(あまりにも)一般への参照を除外することをお勧めTemporalがほとんどjava.lang.Objectを使っているようであるインタフェースを使用して

java.util.Date some = java.util.Date.from(Instant.now()); 

:インタフェースjava.time.temporal.Temporalだけがこれを行います。できるだけ具体的にする必要があります(特に日付と時間の文脈で)。 JSR-310-API officially outputs a warning

このインタフェースは 広くアプリケーションコードで使用されるべきではないフレームワークレベルのインタフェースです。代わりに、アプリケーションは を作成し、LocalDateなどの具象型のインスタンスを渡す必要があります。そこには の多くの理由がありますが、その一部は の実装であり、このインターフェイスはISO以外のカレンダーシステムにある可能性があります。問題の詳細については、 ChronoLocalDateを参照してください。

0

あなたはこの質問に少し間違っていると思います。むしろ、私はあなたが望んでいると信じています。インスタント、LocalDate、一般的なインターフェイスを使用して日付に。 TemporalAccessor私はそのインターフェースだと思います。言っ

@Test 
public void convertTemportalAccessorTypeToDate() throws Exception { 
    Instant instant = Instant.now(); 
    Date expected = Date.from(instant); 
    TemporalAccessor now = instant; 

    long nanos = now.getLong(ChronoField.NANO_OF_SECOND); 
    long epochSeconds = now.getLong(ChronoField.INSTANT_SECONDS); 
    Date date1 = Date.from(Instant.ofEpochSecond(epochSeconds, nanos)); 
    assertThat(date1, is(expected)); 
} 

は、具体的なタイプは、実際に ChronoFieldをサポートする必要がある、そしてそれは、ので、多分トライキャッチでラップしていない場合 UnsupportedTemporalTypeExceptionを投げているようです。

関連する問題