Axiom Справочник языка

Справочник языка

Текущие дата и время

Программе часто нужно узнать, который сейчас час, и отдельно — сколько времени прошло с какого-то события. Первую задачу решают функции, читающие системные часы: DATE, TIME, NOW, UTCDATE, UTCTIME, UTCNOW и NOWINSTANT, — а вторую TIMER и ELAPSEDSECONDS. Все они возвращают новое значение, но различаются типом результата, точностью и тем, читают ли они календарные часы или монотонный счётчик.

DATE

DATE возвращает текущую календарную дату, прочитанную с системных часов в выбранном часовом поясе. Вызывать её можно в выражении консольной или графической программы: оператор SCREEN или CANVAS для этого не нужен.

Синтаксис

DATE[]
DATE(<часовой пояс>)

Аргументы

Форма без аргументов использует местное время среды запуска. Часовой пояс должен быть STRING: "UTC", "LOCAL" или идентификатор, который знает среда запуска. "LOCAL" означает системный местный пояс. Пустая строка и неизвестный идентификатор недопустимы; набор идентификаторов зависит от платформы.

Результат

Результат имеет тип DATE.

Правила и ограничения

Вызов читает часы заново; последовательные вызовы могут относиться к разным мгновениям, особенно около полуночи. Значение не хранит идентификатор пояса. При печати дата имеет форму yyyy-MM-dd, время HH:mm:ss, дата-время yyyy-MM-dd HH:mm:ss. Значение этих функций имеет точность до секунды: доли секунды системных часов отбрасываются при чтении, поэтому точка и дробная часть в выводе не появляются.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимом часовом поясе.

Пример

DIM value AS DATE = DATE("UTC")
PRINT ISDATE(value & "")

Ожидаемый вывод:

TRUE

См. также

Указатель встроенных функций

TIME

Функция TIME возвращает текущее время суток, снятое с системных часов в выбранном часовом поясе. Вызывать её можно в выражении консольной или графической программы: оператор SCREEN или CANVAS для этого не нужен.

Синтаксис

TIME[]
TIME(<часовой пояс>)

Аргументы

Форма без аргументов использует местное время среды запуска. Часовой пояс должен быть STRING: "UTC", "LOCAL" или идентификатор, который знает среда запуска. "LOCAL" означает системный местный пояс. Пустая строка и неизвестный идентификатор недопустимы; набор идентификаторов зависит от платформы.

Результат

Результат имеет тип TIME.

Правила и ограничения

Вызов читает часы заново; последовательные вызовы могут относиться к разным мгновениям, особенно около полуночи. Значение не хранит идентификатор пояса. При печати дата имеет форму yyyy-MM-dd, время HH:mm:ss, дата-время yyyy-MM-dd HH:mm:ss. Значение этих функций имеет точность до секунды: доли секунды системных часов отбрасываются при чтении, поэтому точка и дробная часть в выводе не появляются.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимом часовом поясе.

Пример

DIM value AS TIME = TIME("UTC")
PRINT ISDATE(value & "")

Ожидаемый вывод:

TRUE

См. также

Указатель встроенных функций

NOW

NOW возвращает текущую дату и время, прочитанные с системных часов в выбранном часовом поясе. Вызов допустим в выражении консольной и графической программы; оператор SCREEN или CANVAS не требуется.

Синтаксис

NOW()
NOW(<часовой пояс>)

Аргументы

Форма без аргументов использует местное время среды запуска. Часовой пояс должен быть STRING: "UTC", "LOCAL" или идентификатор, который знает среда запуска. "LOCAL" означает системный местный пояс. Пустая строка и неизвестный идентификатор недопустимы; набор идентификаторов зависит от платформы.

Результат

Результат имеет тип DATETIME.

Правила и ограничения

Вызов читает часы заново; последовательные вызовы могут относиться к разным мгновениям, особенно около полуночи. Значение не хранит идентификатор пояса. При печати дата имеет форму yyyy-MM-dd, время HH:mm:ss, дата-время yyyy-MM-dd HH:mm:ss. Значение этих функций имеет точность до секунды: доли секунды системных часов отбрасываются при чтении, поэтому точка и дробная часть в выводе не появляются.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимом часовом поясе.

Пример

DIM value AS DATETIME = NOW("UTC")
PRINT ISDATE(value & "")

Ожидаемый вывод:

TRUE

См. также

Указатель встроенных функций

NOWINSTANT

NOWINSTANT возвращает текущий момент времени на шкале UTC. Функция читает системные часы и сразу переводит их в однозначный момент: она нужна для отметок событий, журналов и измерений, где важно не показание местных часов, а точка на общей шкале. Вызывается она в выражениях консольных и графических программ; оператор SCREEN или CANVAS не требуется.

Синтаксис

NOWINSTANT()

Аргументы

Функция вызывается без аргументов.

Результат

Функция возвращает значение типа UTCDATETIME. Точность — до секунды: доли секунды системных часов отбрасываются при чтении, как и у NOW и UTCNOW.

Правила и ограничения

Результат не зависит от местного пояса машины и от перевода часов. Каждый вызов читает часы заново, поэтому последовательные вызовы могут относиться к разным моментам. Для измерения прошедшего времени служит TIMER, а не разность моментов: системные часы могут быть переведены.

При отладке чтение текущего момента ограничивает обратный шаг: история до чтения часов недоступна. Последующие изменения можно отменять до этой границы, сохраняя уже прочитанный момент. Это правило действует и при вызове NOWINSTANT через переменную FUNCTION.

Диагностика

Компилятор отклоняет наличие аргументов. Ошибок выполнения у этой формы нет.

Пример

PRINT NOWINSTANT()

Ожидаемый вывод — одна строка вида yyyy-MM-ddTHH:mm:ssZ, например:

2024-02-29T12:34:56Z

См. также

INSTANTVALUE, Указатель встроенных функций

UTCDATE

UTCDATE возвращает текущую дату по UTC: функцию применяют, когда системные часы нужно прочитать по единой шкале, не зависящей от местного пояса. Вызывать её можно в выражении консольной или графической программы — оператор SCREEN или CANVAS не нужен.

Синтаксис

UTCDATE()

Аргументы

Аргументов нет.

Результат

Результат имеет тип DATE.

Правила и ограничения

Каждый вызов читает часы заново. Значение не хранит метку UTC; его происхождение нужно учитывать при последующем преобразовании. Значение имеет точность до секунды: доли секунды системных часов отбрасываются при чтении.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента.

Пример

DIM value AS DATE = UTCDATE()
PRINT ISDATE(value & "")

Ожидаемый вывод:

TRUE

См. также

Указатель встроенных функций

UTCTIME

Функция UTCTIME возвращает текущее время суток по UTC, читая системные часы по единой шкале, не зависящей от местного пояса. Вызов допустим в выражении консольной и графической программы; оператор SCREEN или CANVAS не требуется.

Синтаксис

UTCTIME()

Аргументы

Аргументов нет.

Результат

Результат имеет тип TIME.

Правила и ограничения

Каждый вызов читает часы заново. Значение не хранит метку UTC; его происхождение нужно учитывать при последующем преобразовании. Значение имеет точность до секунды: доли секунды системных часов отбрасываются при чтении.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента.

Пример

DIM value AS TIME = UTCTIME()
PRINT ISDATE(value & "")

Ожидаемый вывод:

TRUE

См. также

Указатель встроенных функций

UTCNOW

UTCNOW возвращает текущую дату и время по UTC. Функция читает системные часы по единой шкале UTC, поэтому её результат не зависит от местного пояса; вызывать её можно в выражении консольной или графической программы, оператор SCREEN или CANVAS не нужен.

Синтаксис

UTCNOW()

Аргументы

Аргументов нет.

Результат

Результат имеет тип DATETIME.

Правила и ограничения

Каждый вызов читает часы заново. Значение не хранит метку UTC; его происхождение нужно учитывать при последующем преобразовании. Значение имеет точность до секунды: доли секунды системных часов отбрасываются при чтении.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента.

Пример

DIM value AS DATETIME = UTCNOW()
PRINT ISDATE(value & "")

Ожидаемый вывод:

TRUE

См. также

Указатель встроенных функций

ELAPSEDSECONDS

ELAPSEDSECONDS возвращает прошедшее время в секундах. Функция измеряет длительность: время работы участка программы либо интервал между двумя событиями. Отдельного типа длительности в языке нет по решению автора, поэтому прошедшее время выражается числом секунд типа DOUBLE. Вызывается она в выражениях консольных и графических программ; оператор SCREEN или CANVAS не требуется.

Синтаксис

ELAPSEDSECONDS()
ELAPSEDSECONDS(<начало>, <конец>)

Аргументы

Форма без аргументов не принимает значений. Форма с двумя аргументами требует значения типа UTCDATETIME: сначала начальный момент, затем конечный.

Результат

Функция возвращает число типа DOUBLE в секундах. Дробная часть сохраняется, поэтому результат пригоден для точных измерений.

Правила и ограничения

Форма без аргументов читает монотонный счётчик, а не календарные часы. Поэтому перевод системного времени, синхронизация часов и наступление полуночи на результат не влияют; отсчёт начинается при запуске программы и не может быть отрицательным. Именно этим она отличается от TIMER, который читает местные часы и в полночь начинается заново.

Каждый запуск программы начинает собственный отсчёт, даже если среда запуска повторно использует тот же источник часов. Чтение календарных функций DATE, TIME или NOW не меняет начало этого отсчёта.

Форма с двумя аргументами вычитает моменты и сохраняет знак: если конечный момент раньше начального, результат отрицательный. Такая разность однозначна и не зависит от часового пояса, потому что оба аргумента заданы на шкале UTC. Календарные значения DATE, TIME и DATETIME этой формой не принимаются: для них сначала нужен TOINSTANT, иначе результат зависел бы от неизвестного пояса.

Форма с двумя аргументами измеряет интервал по календарным часам и потому чувствительна к их переводу. Для измерения времени работы программы используйте форму без аргументов.

При отладке форма без аргументов читает внешний счётчик и ограничивает обратный шаг: часы не перечитываются при отмене последующих изменений. Форма с двумя заданными моментами является чистым вычислением и не создаёт такой границы.

Диагностика

Компилятор отклоняет неверное число аргументов и несовместимый тип аргумента. Ошибок выполнения у формы без аргументов нет; форма с двумя аргументами также не сообщает ошибок, если аргументы имеют тип UTCDATETIME.

Пример

DIM started AS DOUBLE = ELAPSEDSECONDS()
SLEEP 200
PRINT ELAPSEDSECONDS() - started >= 0.2

DIM first AS UTCDATETIME = "2024-02-29T12:00:00Z"
DIM second AS UTCDATETIME = "2024-02-29T14:30:00Z"
PRINT ELAPSEDSECONDS(first, second)

Ожидаемый вывод:

TRUE
9000

См. также

TIMER, Календарное время и момент, Указатель встроенных функций

TIMER

TIMER возвращает число секунд, прошедших с местной полуночи, и тем самым показывает положение текущего мгновения внутри местных суток. Вызывать её можно в выражении консольной или графической программы; оператор SCREEN или CANVAS не требуется.

Синтаксис

TIMER()

Аргументы

Аргументов нет.

Результат

Результат DOUBLE в диапазоне от 0 включительно до 86400 исключительно; дробная часть задаёт долю секунды.

Правила и ограничения

Это местные системные часы, а не монотонный счётчик времени работы программы. В полночь значение начинается заново; перевод системных часов может изменить разность двух показаний. В отличие от TIME и NOW, TIMER сохраняет доли секунды, поэтому подходит для грубой оценки положения мгновения внутри суток.

Для измерения длительности TIMER не годится: в полночь разность двух показаний становится отрицательной, а перевод часов меняет её произвольно. Используйте ELAPSEDSECONDS: форма без аргументов читает монотонный счётчик и не зависит от перевода часов.

Диагностика

Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента.

Пример

DIM seconds AS DOUBLE = TIMER()
PRINT seconds >= 0 AND seconds < 86400

Ожидаемый вывод:

TRUE

См. также

ELAPSEDSECONDS, Указатель встроенных функций