Serializacja daty i czasu w formacie JSON
Wprowadzenie
Istnieje kilka sposobów na serializację dat i czasów w JSONach m. in:
- ISO-8601
- RFC-3339
- UNIX timestamp
- “Tablica” (np [2023,2,14,17,0,0,80000000] - domyślna strategia w niektórych frameworkach JVM)
Dlaczego ISO-8601?
Stosowanie standardu ISO-8601 ma kilka korzyści:
Jednoznaczność: Standard precyzyjnie definiuje format daty i czasu, dzięki czemu różne systemy i aplikacje mogą łatwiej współpracować ze sobą bez mylenia dat.
Międzynarodowość: ISO-8601 jest standardem międzynarodowym, co oznacza, że jest rozpoznawany i stosowany na całym świecie. Używając go, łatwiej jest komunikować się z ludźmi i systemami w różnych krajach.
Ułatwia sortowanie i wyszukiwanie: Formatowanie daty i czasu zgodnie z ISO-8601 ułatwia sortowanie i wyszukiwanie danych w różnych aplikacjach.
Kompatybilność z innymi standardami: ISO-8601 jest powszechnie akceptowany i używany przez wiele innych standardów i specyfikacji, co ułatwia integrację z innymi systemami i aplikacjami.
Dodatkowe wymagania
W celu zapewnienia bezproblemowej współpracy różnych narzędzi w tym frameworków JVM takich jak Spring Boot, Quarkus czy Wildfly, bibliotek do serializacji jak Jackson czy narzędzie jak Kafka Connect wymagane jest dodatkowe doprecyzowanie formatu. W związku z czym przyjmujemy, że dla wartości typu DataTime:
separator czasu 'T' jest wymagany
frakcje sekund są wymagane, ale ich precyzja jest dowolna
wartość musi być parsowalna z użyciem SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS")
Podsumowanie
Wszystkie systemy wymieniające się danymi w formacie JSON powinni dostosować się do formatu ISO-8601 z ww dodatkowymi założeniami. Alternatywne formaty jak unix timestamp czy tym bardziej format tablicowy powinny zostać wycofane.