Получить время в секундах (от 1 января 1900 года по гринвичу)
(get-universal-time)
; 3220993326
Отпарсить universal-time к понятному формату. Вернёт значения: секунда, минута, час, число, месяц, год, день недели, daylight-p, часовой пояс День недели считается от 0 до 6 daylight-p - флаг отвечающий за летнее/зимнее время
(decode-universal-time 3220993326)
; 6
; 22
; 19
; 25
; 1
; 2002
; 4
; NIL
; 5
Получить текущие параметры времени
(get-decoded-time)
; то-же самое
(decode-universal-time (get-universal-time))
Пример работы со временем в коде
(defconstant *day-names*
'("Monday" "Tuesday" "Wednesday"
"Thursday" "Friday" "Saturday"
"Sunday"))
; *DAY-NAMES*
(multiple-value-bind
(second minute hour date month year day-of-week dst-p tz)
(get-decoded-time)
(format t "It is now ~2,'0d:~2,'0d:~2,'0d of ~a, ~d/~2,'0d/~d (GMT~@d)"
hour
minute
second
(nth day-of-week *day-names*)
month
date
year
(- tz)))
; It is now 17:07:17 of Saturday, 1/26/2002 (GMT-5)
Собрать universal-time из значений
(encode-universal-time 6 22 19 25 1 2002)
; 3220993326
Остановить выполнение функции на 3 секунды
(sleep 3)
Получить день недели. Отсчёт от воскресенья: 0..6.
(defun day-of-week (day month year)
"Returns the day of the week as an integer.
Sunday is 0. Works for years after 1752."
(let ((offset '(0 3 2 5 0 3 5 1 4 6 2 4)))
(when (< month 3)
(decf year 1))
(mod
(truncate (+ year
(/ year 4)
(/ (- year)
100)
(/ year 400)
(nth (1- month) offset)
day
-1))
7)))
; DAY-OF-WEEK
(day-of-week 23 12 1965)
; 3
(day-of-week 1 1 1900)
; 0
(day-of-week 31 12 1899)
; 6
Получить время в миллисекундах Абсолютное значение возвращаемое get-internal-real-time не имеет значения - важно только относительное изменение.
internal-time-units-per-second
; 1000
(let ((start (get-internal-real-time)))
(sleep 3.5)
(print (- (get-internal-real-time) start)))
; 3500
Источники:
Автор:
- 7 - Gerald Doussot