Difficile de gérer les valeurs minimales avec Java8 LocalDateTime et Java6 Date

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

Difficile de gérer les valeurs minimales avec Java8 LocalDateTime et Java6 Date
[Java] Utilisez ResolverStyle.LENIENT pour bien gérer la date et l'heure
[Java] Comment utiliser la classe Calendar et la classe Date
[Java] Exemple de programme qui acquiert les valeurs maximum et minimum d'un tableau
[Pour les débutants] Exemple minimum pour afficher RecyclerView en Java
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
Qu'est-ce que la classe LocalDateTime? [Java débutant] -Date et classe d'heure-
Exemple de code pour analyser la date et l'heure avec SimpleDateFormat de Java
Différences dans la gestion des chaînes entre Java et Perl
Instructions Java while et for
[Pour les débutants] Exemple minimum pour mettre à jour RecyclerView avec DiffUtils en Java
Date de sortie de Java et résumé EOL
Java pour les débutants, les expressions et les opérateurs 1
Valeurs par défaut pour MaxHeapSize et InitialHeapSize
Arguments Java, valeurs de retour et surcharges
Java pour les débutants, les expressions et les opérateurs 2
[MySQL] [java] Date et heure de réception
Classes et instances Java pour les débutants
Attribuer automatiquement la date et le numéro de build du jour à la version Maven
Comment implémenter le calcul de la date en Java
Introduction à Java pour la première fois # 2
[java] Résumé de la gestion des caractères
À propos de la procédure pour que Java fonctionne
Implémentation Java pour créer et résoudre des labyrinthes
[Java] Comment sortir et écrire des fichiers!
[Java] Comment régler la date sur 00:00:00
Java 8 pour démarrer maintenant ~ API de date et d'heure ~
Java: Comment envoyer des valeurs du servlet au servlet
Comment obtenir la date avec Java
[Java] Proxy pour la journalisation des résultats SQL et SQL
[Introduction à Java] À propos des déclarations et des types de variables
Mémo pour la migration de Java vers Kotlin
De Java à C et de C à Java dans Android Studio
[Java] Obtenez la date avec la classe LocalDateTime