현재 api를 위한 시간 표현에서 가장 인기 있는 것은 Unix Time과 ISO-8601 이다.

표현에 따른 가독성과 변환

Unix Time은 1970-01-01 UTC 에서의 경과 시간을 초(or 밀리 초)로 환산해서 숫자로 나타내고 ISO 8601은 사람이 인식할 수 있는 문자로 나타낸다.

"unix_time": 1521739975,
"unix_time_milisecond": 1521739975123,
"iso-8601": "2018-03-22T17:32:55+09:00",
"iso-8601_timestamp": "2018-03-22T17:32:55.123+09:00"

javascript에서는 ecma5 부터 Date객체 에서 RFC2822 또는 ISO 8601를 지원하는데 IE9 미만에서는 ECMAScript 5를 하지 못하기 때문에 바벨과 같은 트랜스파일러를 사용하는 것과 같은 주의가 필요하다.

타임존과 정확성

region에 따라서 시간대가 다른 서비스를 하고 있을 경우 ISO는 약점으로 작용할 수 있다.

"local":"2018-03-23T13:10:10",
"utc":"2018-03-23T13:10:10Z",
"utc_offset":"2018-03-23T13:10:10+09:00"

Unix Time의 경우 UTC로 부터의 Offset이기 때문에 타임존과 상관없이 일정한 값을 가지므로 그 표현과 사용에 큰 제약이 없다.

IOS 8601은 위와 같이 명시하지 않으면 로컬 타임으로 인식하는데 다른 시간대를 사용하는 지역에 동시에 서비스를 하거나 서머타임을 적용하는 경우 시간에 대한 혼동이 올 수 있다.

입력 받은 시간을 다른 타임존으로 인식해서 사용해야 하는 경우에도 단순한 덧셈, 뺄셈 이지만 시간 확인에 대한 어려움을 경험하게 된다.

개인적으로는 unix time을 사용하고 클라이언트에서 파싱하는 방식이 간단하지 않나 생각된다. 그리고 파싱할 때는 moment 모듈을 사용하는 것이 좋을 것 같다. 썸머 타임 등을 계산해야 하기에...

참고

https://ko.wikipedia.org/wiki/협정_세계시

https://www.popit.kr/rest-api-날짜시간-표현-정하기/