목차
날짜 date / 시간 time
ISO 8601
초(second)와 ms,ns
날짜 date / 시간 time
윤년 버그 대응법
ISO 8601
ISO 8601
날짜 표현 국제 표준
보통
2013-10-11T10:31:45.453+09:00
같은 형태로 표현됨.
초(second)와 ms,ns
MySQL DATETIME type
을 비롯해 날짜와 시간 정보를 저장할때 fractional second(ms, ns)부분 저장에 따라 반올림 현상으로 시간이나 날짜바 바뀌는 현상이 발생할 수 있다.
애초에 모든 시간을 초(second) 까지만 저장하게 하고 일관성있게 다루거나
아니면 모든 시간을 ms/ns 까지 저장하게 하고 일관성 있게 다루는 것이 좋다.
이때 초 단위로 다룰 때는 메모리상의 시간 객체도 초 단위까지만 가지게 하고, 이를 JSON 등으로 전송할 때도 초단위까지만 전송하게 모든 것이 갖춰져야 한다. ms/ns 까지 다룰 때도 마찬가지 이다.
이렇게 하지 않으면 DB 저장시에는 초단위로 되지만 이를 MQ 나 API로 전송할 때는 ms/ns 단위까지 전송해서 다른 시스템이 다른 시간을 가지게 될 가능성이 생긴다.
microservices 로 가면서 서로 다른 서비스가 비정규화된 데이터를 각자 저장할 때 시간 정보를 누구는 second 누구는 ms/ns 까지 저항하면 서로 다른 시간 정보로 인해 미묘하게 오류가 발생할 수 있다.
하나의 시스템에서 두가지 시간체계를 섞어서 사용하지 않는 것이 좋다. 특히 mysql 은 이 JDBC 드라이버에서 fractional second 를 전체를 truncate 시키거나 안시키거나 하므로 일관성이 있어야 한다.