Beachten Sie, dass ich beim Versuch, mit Java8 LocalDateTime
und Java6 Date
über JSON zu serialisieren und zu deserialisieren, vom Titel abhängig war.
Als Bild habe ich versucht, projektübergreifend Folgendes zu tun.
Java8 DateTime -> (Serialize) -> JSON -> (Deserialize) -> Java6 Date
Dann erscheint die Differenz zwischen dem möglichen Wertebereich zwischen "LocalDateTime" und "Date". Insbesondere passiert, dass der ursprüngliche Wert verloren geht, wenn Sie etwas mit einem Wertebereich deserialisieren, der nicht durch "Datum" dargestellt werden kann, z. B. "LocalDateTime.MIN".
Insbesondere wird es wie folgt sein.
import java.time.LocalDateTime
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
import java.util.Date
import java.text.SimpleDateFormat
fun main(args: Array<String>) {
val formatter = SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss")
val minLocalDateTime = formatter.format(formatter.parse(
DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(LocalDateTime.MIN)))
val minDateText = formatter.format(Date(Long.MIN_VALUE))
val zeroDateText = formatter.format(Date(0L))
val zeroEpocLocalDateTime = formatter.format(formatter.parse(
DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(
LocalDateTime.ofEpochSecond(0L, 0, ZoneOffset.UTC))))
println (
"""Java8 DateTime | LocalDateTime.MIN | ${LocalDateTime.MIN}
Java6 Date | LocalDateTime.MIN | $minLocalDateTime
Java6 Date | Date(Long.MIN_VALUE) | $minDateText
Java6 Date | Date(0L) | $zeroDateText
Java8 DateTime | ofEpochSecond(0L, 0,) | $zeroEpocLocalDateTime
""")
}
Ausführungsergebnis.
Java8 DateTime | LocalDateTime.MIN | -999999999-01-01T00:00
Java6 Date | LocalDateTime.MIN | 169087565-03-15T04:51:43
Java6 Date | Date(Long.MIN_VALUE) | 292269055-12-02T04:47:04
Java6 Date | Date(0L) | 1970-01-01T12:00:00
Java8 DateTime | ofEpochSecond(0L, 0,) | 1970-01-01T12:00:00
Wie bereits im Ausführungsergebnis erwähnt, wird die Epochenzeit verwendet, um diesen Unterschied auszugleichen. Durch Festlegen des Mindestwerts auf der Seite, auf der "LocalDateTime" verwendet wird, auf den Mindestwert in der Epochenzeit bleibt die Kompatibilität erhalten.
Sie können die minimale Epochenzeit mithilfe von "LocalDateTime.ofEpochSecond (0L, 0, ZoneOffset.UTC)" ermitteln. Neben "LocalDateTime" können Sie also Java6 verwenden. Sie können es mit Ihrem Projekt kompatibel machen.
Recommended Posts