emacs lisp로 ISO 8601 날짜와 시간 비교

less than 1 minute read

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-ptime-equal-p 함수를 같이 사용해야 해서 time-subtract 함수를 사용했다.

참고

C-x C-s C-x C-c