(defun clock (hhmm)
  (let ((hh (parse-integer (subseq hhmm 0 2)))
        (mm (parse-integer (subseq hhmm 3 5))))
    (princ
      (substitute #\  #\- (format nil
                                  "It's ~r~:[~:[~; oh~] ~r~;~*~*~] ~:[pm~;am~]~%"
                                  (1+ (mod (1- hh) 12))
                                  (= mm 0)
                                  (< mm 10)
                                  mm
                                  (< hh 12))))))

;; test
(mapc #'clock '("00:00" "01:30" "12:05" "14:01" "20:29" "21:00"))