2016-10-24 4 views
1

Wie kann ich eine java.time.temporal.Temporal Instanz in eine java.util.Date Instanz konvertieren?Konvertieren Sie java.time.temporal.Temporal in java.util.Date

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

Ich habe einen Blick auf Oracle's legacy time trail documentation genommen, konnte aber keine Lösung finden, das passt.

+2

Der Typ 'Temporal' ist so allgemein und abstrakt, dass es nahezu unmöglich ist, eine Lösung zu finden, d.h. eine Umwandlung in' java.util.Date'. Betrachten Sie zum Beispiel den Typ 'LocalDate'. Wie kann man es ohne kontextuelle Informationen wie Zeitzone oder Uhrzeit konvertieren? –

+1

Wenn Sie jedoch 'java.time.Instant' nur konvertieren möchten, dann ist es ziemlich einfach. Sehen Sie sich die API von 'java.util.Date' an. (Siehe Methode 'from (Instant)'). –

Antwort

-1

Am unteren Ende hat:

Obwohl die java.time.format.DateTimeFormatter einen leistungsfähigen Mechanismus für die Formatierung von Datums- und Zeitwerte liefert, können Sie auch die zeitlichen basierte java.time verwenden Klassen direkt mit java.util.Formatter und String.format mit derselben musterbasierten Formatierung, die Sie mit den Datums- und Uhrzeitklassen java.util verwenden.

Es sieht aus wie Sie die DateTimeFormatter Klasse, mit documentation here und vielleicht geht durch so etwas wie dieses Beispiel verwenden möchten:

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

Ich denke, die Frage geht nicht um Formatierung. –

+0

@MenoHochschild richtig, und meine Antwort liefert ihm ein LocalDate, das ist ein Datumsformat und kann in ein java.util.Date Objekt umgewandelt werden. –

+1

@TrevorYokum Die Frage stellt sich die Frage nach der Konvertierung in eine java.util.Date. Deine Antwort hat damit nichts zu tun ... – assylias

4

empfehle ich auszulassen jede Bezugnahme auf die (zu) allgemein Schnittstelle java.time.temporal.Temporal und gerade dies zu tun:

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

die Schnittstelle verwenden Temporal fast wie ist java.lang.Object verwenden. Sie sollten so konkret wie möglich sein (besonders im Zusammenhang mit Datum und Uhrzeit). Auch der JSR-310-API officially outputs a warning:

Diese Schnittstelle ist eine Framework-Level-Schnittstelle, die nicht weit verbreitet in dem Anwendungscode verwendet werden sollen. Stattdessen sollten Anwendungen erstellen und Instanzen konkreter Typen wie LocalDate weitergeben. Dort sind viele Gründe dafür, Teil davon ist, dass Implementierungen von diese Schnittstelle in anderen Kalendersystemen als ISO sein kann. Eine ausführlichere Diskussion der Probleme finden Sie unter ChronoLocalDate.

0

Ich denke, Sie haben diese Frage etwas falsch gestellt. Ich glaube eher, dass Sie wollen Wie konvertiere ich eine konkrete java.time-Klasse, z. Instant, LocalDate, zu einem Date über eine generische Schnittstelle. TemporalAccessor Ich glaube, dass diese Schnittstelle ist.

@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)); 
} 

, was gesagt, hat die konkrete Art tatsächlich die ChronoField, zu unterstützen und scheint UnsupportedTemporalTypeException zu werfen, wenn es nicht so vielleicht in einem Try-Catch-wickelt.

Verwandte Themen