2015-08-26 5 views
6

Gibt es eine Möglichkeit, ein Datum (ohne eine Zeit) darzustellen, das einer Zeitzone zugeordnet ist? Die einzige Darstellung des Datums ohne Zeitangabe, die ich finden konnte, ist LocalDate. Ich schätze, dass Sie keine Zone angeben können.Java8 in Zonen ohne Datum Zeit

Antwort

7

Kurze Antwort, es gibt keinen solchen Typ in Java-8.

Die Kombination eines Kalenderdatums und einer Zeitzone ist zumindest fraglich. Grund dafür ist, dass die Zeitzonen an Datum und Uhrzeit arbeiten sollen. Da Zeitzonen für die Übersetzung zwischen globalen Zeitpunkten/Momenten und lokalen Zeitstempeln (einschließlich Datum und Zeit) verantwortlich sind, ist eine Kombination aus nur einem Datum und einer Zone einfach nicht vollständig, um solche Transformationen zu ermöglichen.

Die einzige ähnliche Art mir bewusst bin, ist der Typ

xs: date

in XML-Schema, das eine zusätzliche explizit erlaubt Offset (die weniger als, weil es eine Zeitzone speichert keine Sommersparregeln oder historischen Offsets). Meiner Meinung nach hat das W3C-Konsortium diesen Typ aus Symmetriegründen nicht für Echtzeitaufgaben eingeführt. JSR-310 (das das java.time-Paket in Java-8 einführte) sollte ursprünglich einen ähnlichen Typ namens OffsetDate anbieten, siehe auch this page. Es war removed jedoch als Java-8 für die Veröffentlichung fertig war.

Natürlich können Sie selbst eine einfache Klasse schreiben, die zwei Bundesstaaten der Typen LocalDate und ZoneId enthält (aber was ist Ihr Anwendungsfall ???). Für XML würde ich lieber LocalDate und ZonalOffset wählen.

5

Vielleicht können Sie die Klasse ZonedDateTime verwenden:

ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Europe/Paris")); 
LocalDate localDate = zonedDateTime.toLocalDate(); // gets you the date without time 
ZoneId zoneId = zonedDateTime.getZone(); // gets you the timezone