In SRFI-19, round-tripping some UTC dates through the time-utc structure format, for the couple of seconds around a leap second:
scheme@(guile-user)> (use-modules (srfi srfi-19)) scheme@(guile-user)> (define (tdate d) (write (list (date->string d "~4") (date->string (time-utc->date (date->time-utc d) 0) "~4"))) (newline)) scheme@(guile-user)> (tdate (make-date 0 59 59 23 30 6 2012 0)) ("2012-06-30T23:59:59Z" "2012-06-30T23:59:59Z") scheme@(guile-user)> (tdate (make-date 0 60 59 23 30 6 2012 0)) ("2012-06-30T23:59:60Z" "2012-06-30T23:59:60Z") scheme@(guile-user)> (tdate (make-date 0 0 0 0 1 7 2012 0)) ("2012-07-01T00:00:00Z" "2012-06-30T23:59:60Z") scheme@(guile-user)> (tdate (make-date 0 1 0 0 1 7 2012 0)) ("2012-07-01T00:00:01Z" "2012-07-01T00:00:01Z") Observe that the second immediately following the leap second, the first second of the following UTC day, isn't round-tripped correctly. It comes back as the leap second. These two seconds are perfectly distinct parts of the UTC time scale, and the time-utc format ought to preserve their distinction. -zefram