[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: elisp Q: round & display time in 5-min. increments
From: |
Ari Roponen |
Subject: |
Re: elisp Q: round & display time in 5-min. increments |
Date: |
Fri, 30 Nov 2007 09:51:58 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (gnu/linux) |
Hi,
Edward <edward.dodge@gmail.com> writes:
> (concat
> (format-time-string "%H" (current-time))
> ":"
> (int-to-string
> (* (round (string-to-number (format-time-string
> "%M" (current-
> time))) 5) 5))
> " ")
>
> This works for most times, but it doesn't cover any edge conditions.
> For example, between the 55th minute and the end of the hour, it
> rounds to "60" and doesn't carry to the hour. Around the 5th minute,
> it generates "5", but it doesn't pad with a zero.
>
>
> Does anyone know of some pre-existing code in Emacs that does what
> I'm
> trying to do? Or failing that, does anyone have an elegant snippet
> of code that accomplishes this task while meeting these edge-
> conditions? I'm not worried about the midnight edge-condition, but
> if you know of code that does that too, so much the better.
I don't know about the existing code, but this seems to do what you
want:
(format-time-string
"%H:%M "
(apply 'encode-time
(let* ((time (decode-time
(time-add (current-time)
(seconds-to-time 150)))) ;2m30s
(mins (cadr time)))
(setcar (cdr time) (- mins (mod mins 5)))
time)))
--
Ari Roponen