Функции systime и strftime, описанные в разделе 12.5 [Функции для действий с метками времени], стр. 148, обеспечивают минимум усилий, необходимых для действий с временем в удобной для чтения форме. Хотя strftime и велика, управляющие форматы не необходимо запоминать или понимать при чтении программы.
Следующая функция, gettimeofday, заполняет данный пользователем массив пред форматированной временной информацией. Она возвращает цепочку с текущим временем в том же формате как и утилиты даты.
# gettimeofday --- выдать время дня в обычном формате
# Arnold Robbins, arnold@gnu.org, Public Domain, May 1993
# # Возвращает цепочку в формате выхода date(1)
# Заполняет массив аргументов времени индивидуальными значениями:
# time["second"] -- секунды (0 - 59) # time["minute"] -- минуты (0 - 59)
# time["hour"] -- часы (0 - 23) # time["althour"] -- часы (0 - 12)
# time["monthday"] -- день месяца (1 - 31)
# time["month"] -- месяц года (1 - 12)
# time["monthname"] -- имя месяца
# time["shortmonth"] -- сокращенное имя месяца
# time["year"] -- год в пределах века (0 - 99)
# time["fullyear"] -- год со столетиями (19xx or 20xx)
# time["weekday"] -- день недели (Воскресенье = 0)
# time["altweekday"] -- день недели (Понедельник = 0)
# time["weeknum"] -- номер недели, воскресенье первый день
# time["altweeknum"] -- номер недели, Понедельник первый день
# time["dayname"] -- имя дня недели
# time["shortdayname"] -- сокращенное имя дня недели
# time["yearday"] -- день в году (0 - 365)
# time["timezone"] -- сокращение для time
function gettimeofday(time, ret, now, i) -
# выдает время сразу, избегая не необходимых обращений к системе
now = systime()
# возвращает вывод типа date(1)
ret = strftime("%a %b %d %H:%M:%S %Z %Y", now)
# чистка выходного массива
for (i in time) delete time[i]
# Заполнение его значениями, числовые цепочки превращаются в числа
# добавлением 0
time["second"] = strftime("%S", now) + 0
time["minute"] = strftime("%M", now) + 0
time["hour"] = strftime("%H", now) + 0
time["althour"] = strftime("%I", now) + 0
time["monthday"] = strftime("%d", now) + 0
time["month"] = strftime("%m", now) + 0
time["monthname"] = strftime("%B", now)
time["shortmonth"] = strftime("%b", now)
time["year"] = strftime("%y", now) + 0
time["fullyear"] = strftime("%Y", now) + 0
time["weekday"] = strftime("%w", now) + 0
time["altweekday"] = strftime("%u", now) + 0
time["dayname"] = strftime("%A", now)
time["shortdayname"] = strftime("%a", now)
time["yearday"] = strftime("%j", now) + 0
time["timezone"] = strftime("%Z", now)
time["ampm"] = strftime("%p", now)
time["weeknum"] = strftime("%U", now) + 0
time["altweeknum"] = strftime("%W", now) + 0
return ret ""
Цепочки-индексы легче использовать и читать, чем различные форматы, требуемые для strftime. Программа alarm, представленная в разделе 16.2.2 [Программа-будильник], стр.228, использует эту функцию.
Функция gettimeofday, представлена выше в той форме в какой была написана. Более общая форма этой функции должна снабжать пользователя по выбору отметкой времени, которая могла бы использоваться вместо текущего времени.