emacs lisp로 ISO 8601 날짜와 시간 비교
time-less-p
, time-equal-p
같은 비교 함수 및 time-subtract
, time-add
같은 계산 함수를 사용하려면 lisp timestamp로 변환해야 한다.
(parse-iso8601-time-string "2020-12-03T06:58:28.649+09:00")
(24520 3588)
(parse-iso8601-time-string "2020-12-03T06:58:28.649Z")
(24520 35988)
시간 오프셋을 넣고 안 넣고에 따라서 리스트 두 번째 요소의 값이 차이가 난다.
(35988 - 3588) / (60 * 60)
9
lisp timestamp 리스트의 두 번째 요소는 초 단위며 9시간 차이가 나는 걸 볼 수 있다. UTC를 기준으로 lisp timestamp를 만든다.
(defun between-date-p (begin end target)
(let ((begin (parse-iso8601-time-string begin))
(end (parse-iso8601-time-string end))
(target (parse-iso8601-time-string target)))
(and (>= (time-subtract target begin) 0)
(>= (time-subtract end target) 0))))
(between-date-p "2020-12-03T06:58:28.649Z" "2020-12-03T23:58:28.649Z" "2020-12-03T23:58:28.649+09:00")
t
같은 것까지 비교하려면 time-less-p
와 time-equal-p
함수를 같이 사용해야 해서 time-subtract
함수를 사용했다.
참고
C-x C-s C-x C-c