Время суток
В этом разделе объясняется, как определить текущее время и часовой пояс.
Многие функции, такие как current-time и file-attributes, возвращают значения временных меток Lisp, которые учитывают секунды и могут представлять абсолютное время, подсчитывая секунды с эпохи 1970-01-01 00:00:00 UTC.
Хотя традиционно временные метки Lisp представляли собой пары целых чисел, их форма эволюционировала, и программы обычно не должны зависеть от текущей формата. Если вашей программе необходима определённая форма временной метки, вы можете использовать функцию time-convert, чтобы преобразовать её в нужную форму. См. Преобразование времени.
В настоящее время существует три формы временных меток Lisp, каждая из которых представляет количество секунд:
- Целое число. Хотя это простейшая форма, она не может представлять временные метки с дробной частью секунды.
- Пара целых чисел
(ticks . hz), где hz положительное. Это представляет ticks/hz секунды, что эквивалентно ticks секундам, если hz равно 1. Распространённое значение для hz — 1000000000, для часов с разрешением в наносекунды.28 - Список из четырёх целых чисел
(high low micro pico), где 0≤low<65536, 0≤micro<1000000 и 0≤pico<1000000. Это представляет количество секунд по формуле: high * 2**16 + low + micro * 10**-6 + pico * 10**-12. В некоторых случаях функции могут по умолчанию возвращать списки из двух или трёх элементов, при этом опущенные компоненты micro и pico по умолчанию равны нулю. На всех современных машинах pico является кратным 1000, но это может измениться с появлением часов с более высоким разрешением.
Аргументы функций, например, аргумент time для current-time-string, принимают более общий формат значения времени, который может быть временной меткой Lisp, nil для текущего времени, единственным числом с плавающей точкой для секунд или списком (high low micro) или (high
low), который является усечённой временной меткой со списком, где пропущенные элементы принимаются за нули.
Значения времени можно преобразовывать в календарные и другие формы. Некоторые из этих преобразований основаны на функциях операционной системы, которые ограничивают диапазон возможных значений времени и сигнализируют об ошибке, например, «"Указанное время не может быть представлено"», если пределы превышены. Например, система может не поддерживать годы до 1970 года, или годы до 1901 года, или годы очень далёкого будущего. Вы можете преобразовать значение времени в удобочитаемую строку с помощью format-time-string, во временную метку Lisp с помощью time-convert, и в другие формы с помощью decode-time и float-time. Эти функции описаны в следующих разделах.
- Функция: current-time-string &optional time zone
-
Эта функция возвращает текущее время и дату в виде удобочитаемой строки. Формат не изменяется для начальной части строки, содержащей день недели, месяц, день месяца и время суток в указанном порядке: количество символов, используемых для этих полей, всегда одинаково, хотя (если вам не нужны английские аббревиатуры дней недели или месяцев независимо от языка) обычно удобнее использовать
format-time-string, чем извлекать поля из выходных данныхcurrent-time-string, так как год может не содержать ровно четыре цифры, и в будущем могут быть добавлены дополнительные сведения в конце.Аргумент time, если указан, определяет время для форматирования вместо текущего времени. Необязательный аргумент zone по умолчанию устанавливается на текущее правило часового пояса. См. Правила часовых поясов. Операционная система ограничивает диапазон значений времени и часового пояса.
(current-time-string) ⇒ "Fri Nov 1 15:59:49 2019"
- Функция: current-time
Эта функция возвращает текущее время в виде временной метки Lisp. Хотя временная метка имеет вид
(high low micro pico)в текущей версии Emacs, планируется изменить это в будущих версиях Emacs. Вы можете использовать функциюtime-convertдля преобразования временной метки в другую форму. См. Преобразование времени.
- Функция: float-time &optional time
-
Эта функция возвращает текущее время как число с плавающей точкой в секундах с эпохи. Необязательный аргумент time, если указан, определяет время для преобразования вместо текущего времени.
Предупреждение: Поскольку результат представляет собой число с плавающей точкой, он может быть не точным. Не используйте эту функцию, если требуются точные временные метки. Например, на типичных системах
(float-time '(1 . 10))отображается как ‘0.1’, но немного больше, чем 1/10.time-to-seconds— псевдоним для этой функции.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Time-of-Day.html