Notez que j'étais accro au titre en essayant de sérialiser et de désérialiser avec Java8 LocalDateTime
et Java6 Date
via JSON.
En tant qu'image, j'ai essayé de faire ce qui suit à travers les projets.
Java8 DateTime -> (Serialize) -> JSON -> (Deserialize) -> Java6 Date
Ensuite, la différence entre la plage de valeurs possible entre «LocalDateTime» et «Date» apparaît. Plus précisément, ce qui se passe, c'est que lorsque vous désérialisez quelque chose avec une plage de valeurs qui ne peut pas être représentée par "Date", comme "LocalDateTime.MIN", la valeur d'origine est perdue.
Plus précisément, ce sera comme suit.
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
""")
}
Résultat de l'exécution.
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
Comme déjà mentionné dans le résultat d'exécution, le temps d'époque est utilisé pour absorber cette différence.
En définissant la valeur minimale du côté qui utilise LocalDateTime
sur la valeur minimale de l'époque, la compatibilité est maintenue.
Vous pouvez obtenir l'heure d'époque minimale en utilisant LocalDateTime.ofEpochSecond (0L, 0, ZoneOffset.UTC)
, donc du côté de l'utilisation de LocalDateTime
, vous pouvez utiliser Java6. Vous pourrez le rendre compatible avec votre projet.
Recommended Posts