Мне часто приходится отображать дату в ConTeXt, но не на сегодня, как отображается с \date
, а на следующий день. Как вместо этого напечатать завтрашнюю дату?
Например, 7 августа 2019 г.
решение1
Сделай это в Lua. Функцияos.time()
дает вам текущее время как временную метку POSIX, т.е. количество секунд с 1/1/1970. Добавьте к этому количество секунд в сутках, чтобы получить то же время, но завтра. Введите этот результат вos.date
. Обычно os.date
форматирует дату в строку, но если аргумент формата равен "*t"
, он возвращает таблицу с временной меткой, разделенной на разумные единицы. Из нее можно извлечь день, месяц и год и вставить их в date
функцию ConTeXt.
Строго говоря, это работает только в системе POSIX, но я не знаю ни одной системы, которая бы это делала.нетиспользовать временные метки POSIX. Этот подход также должен работать для границ месяцев и годов и даже с високосными годами. Единственная проблема в том,високосные секунды, потому что если вы выполните это точно в секунду координации, вы можете оказаться в том же дне, а не завтра, но это происходит только раз в несколько лет.
\starttext
\currentdate
\ctxlua{
local t = os.date("*t", os.time() + 24*60*60)
context.date{d = t.day, m = t.month, y = t.year}
}
\stoptext