36.1 Утилиты управления временем
Основной набор функций Octave для работы со значениями времени смоделирован по соответствующим функциям стандартной библиотеки C. Несколько этих функций используют структуру данных для времени, которая включает следующие элементы:
usec-
Микросекунды после секунды (0-999999).
sec-
Секунды после минуты (0-60). Это число может быть 60, чтобы учесть високосные секунды.
min-
Минуты после часа (0-59).
hour-
Часы с полуночи (0-23).
mday-
Число дня месяца (1-31).
mon-
Месяцы с января (0-11).
year-
Годы с 1900 года.
wday-
Дни с воскресенья (0-6).
yday-
Дни с 1 января (0-365).
isdst-
Флаг летнего времени.
gmtoff-
Смещение в секундах от UTC.
zoneВременная зона.
В описаниях следующих функций эта структура обозначается как tm_struct.
- : seconds = time ()
-
Возвращает текущее время в виде числа секунд с момента эпохи.
Эпоха относится к 00:00:00 UTC (Координированное универсальное время) 1 января 1970 года. Например, в понедельник 17 февраля 1997 года в 07:15:06 UTC значение, возвращаемое
time, составляло 856163706.См. также: strftime, strptime, localtime, gmtime, mktime, now, date, clock, datenum, datestr, datevec, calendar, weekday.
- : t = now ()
-
Возвращает текущую локальную дату/время в виде серийного номера дня (см.
datenum).Целая часть,
floor (now), соответствует числу дней между сегодняшним днем и 1 января 0000 года.Дробная часть,
rem (now, 1), соответствует текущему времени.
- : ctime (t)
-
Преобразует значение, возвращенное из
time, (или любое другое целое неотрицательное число) в локальное время и возвращает строку в формате, аналогичномasctime.Функция
ctime (time)эквивалентнаasctime (localtime (time)). Например:ctime (time ()) ⇒ "Mon Feb 17 01:15:06 1997\n"
- : tm_struct = gmtime (t)
-
Принимая значение, возвращенное из
time, или любое неотрицательное целое число, возвращает структуру времени, соответствующую UTC (Координированному универсальному времени).Например:
gmtime (time ()) ⇒ { usec = 0 sec = 6 min = 15 hour = 7 mday = 17 mon = 1 year = 97 wday = 1 yday = 47 isdst = 0 gmtoff = 0 zone = GMT }См. также: strftime, strptime, localtime, mktime, time, now, date, clock, datenum, datestr, datevec, calendar, weekday.
- : tm_struct = localtime (t)
-
Принимая значение, возвращенное из
time, или любое неотрицательное целое число, возвращает структуру времени, соответствующую локальной временной зоне.localtime (time ()) ⇒ { usec = 0 sec = 6 min = 15 hour = 1 mday = 17 mon = 1 year = 97 wday = 1 yday = 47 isdst = 0 gmtoff = -21600 zone = CST }См. также: strftime, strptime, gmtime, mktime, time, now, date, clock, datenum, datestr, datevec, calendar, weekday.
- : seconds = mktime (tm_struct)
-
Преобразует структуру времени, соответствующую локальному времени, в количество секунд с момента эпохи.
Например:
mktime (localtime (time ())) ⇒ 856163706См. также: strftime, strptime, localtime, gmtime, time, now, date, clock, datenum, datestr, datevec, calendar, weekday.
- : asctime (tm_struct)
-
Преобразует структуру времени в строку в следующем формате:
"ddd mmm mm HH:MM:SS yyyy\n".Например:
asctime (localtime (time ())) ⇒ "Mon Feb 17 01:15:06 1997\n"Это эквивалентно
ctime (time ()).
- : strftime (fmt, tm_struct)
-
Форматирует структуру времени tm_struct гибким способом, используя строку формата fmt, которая содержит подстановки ‘%’, подобные тем, что в
printf.За исключением случаев, отмеченных в примечаниях, подставляемые поля имеют фиксированный размер; числовые поля дополняются нулями при необходимости. По умолчанию, заполнение производится нулями; для полей, отображающих одно число, заполнение можно изменить или отключить, добавив к символу ‘%’ один из модификаторов, описанных ниже. Неизвестные спецификаторы полей копируются как обычные символы. Все остальные символы копируются в выходные данные без изменений. Например:
strftime ("%r (%Z) %A %e %B %Y", localtime (time ())) ⇒ "01:15:06 AM (CST) Monday 17 February 1997"Функция Octave
strftimeподдерживает расширенный набор спецификаторов полей ANSI C.Литеральные символьные поля:
%%-
Символ %.
%n-
Символ новой строки.
%tСимвол табуляции.
Числовые модификаторы (нестандартное расширение):
- (dash)-
Не добавлять заполнение поля.
_ (underscore)Заполнять поле пробелами.
Поля времени:
%H-
Час (00-23).
%I-
Час (01-12).
%k-
Час (0-23).
%l-
Час (1-12).
%M-
Минута (00-59).
%p-
Локальное обозначение AM или PM.
%r-
Время, 12-часовое (чч:мм:сс [ДОП]ПМ).
%R-
Время, 24-часовое (чч:мм).
%s-
Время в секундах с момента 00:00:00, 1 января 1970 года (нестандартное расширение).
%S-
Секунда (00-61).
%T-
Время, 24-часовое (чч:мм:сс).
%X-
Локальное представление времени (%Ч:%М:%С).
%z-
Смещение от UTC (±ччмм), или ничего, если временная зона не определена.
%ZВременная зона (EDT), или ничего, если временная зона не определена.
Поля даты:
%a-
Сокращенное имя дня недели в локальном формате (Вс-Сб).
%A-
Полное имя дня недели в локальном формате, переменной длины (Воскресенье-Суббота).
%b-
Сокращенное имя месяца в локальном формате (Ян-Дек).
%B-
Полное имя месяца в локальном формате, переменной длины (Январь-Декабрь).
%c-
Дата и время в локальном формате (Сб Ноя 04 12:02:33 EST 1989).
%C-
Столетие (00-99).
%d-
Число дня месяца (01-31).
%e-
Число дня месяца (1-31).
%D-
Дата (мм/дд/гг).
%h-
То же, что и %b.
%j-
Номер дня года (001-366).
%m-
Номер месяца (01-12).
%U-
Номер недели года, с воскресенья как первого дня недели (00-53).
%w-
День недели (0-6).
%W-
Номер недели года, с понедельника как первого дня недели (00-53).
%x-
Локальное представление даты (мм/дд/гг).
%y-
Последние две цифры года (00-99).
%YГод (1970-).
См. также: strptime, localtime, gmtime, mktime, time, now, date, clock, datenum, datestr, datevec, calendar, weekday.
- : [tm_struct, nchars] = strptime (str, fmt)
-
Преобразует строку str во временную структуру tm_struct под управлением строки формата fmt.
Если fmt не соответствует шаблону, nchars равно 0; в противном случае, она устанавливается в позицию последнего сопоставленного символа плюс 1. Всегда проверяйте это, если вы не уверены на все сто, что строка даты будет обработана корректно.
См. также: strftime, localtime, gmtime, mktime, time, now, date, clock, datenum, datestr, datevec, calendar, weekday.
Большинство оставшихся функций, описанных в этом разделе, не основаны на стандартной библиотеке C. Некоторые доступны для совместимости с MATLAB, а другие предоставляются, поскольку они полезны.
- : clock ()
-
Возвращает текущую локальную дату и время в виде вектора дат.
Вектор дат содержит следующие поля: текущий год, месяц (1-12), день (1-31), час (0-23), минуту (0-59) и секунды (0-61). Поле секунд имеет дробную часть после десятичной точки для расширенной точности.
Например:
fix (clock ()) ⇒ 1993 8 20 4 56 1
clockболее точен на системах, которые имеют функциюgettimeofday.
- : date ()
-
Возвращает текущую дату в виде символьной строки в формате ДД-MMM-ГГГГ.
Например:
date () ⇒ 20-Aug-1993
- : etime (t2, t1)
-
Возвращает разницу во времени в секундах между двумя значениями времени, полученными из
clock(t2 - t1).Например:
t0 = clock (); # many computations later… elapsed_time = etime (clock (), t0);
присвоит переменной
elapsed_timeколичество секунд, прошедших с момента установки переменнойt0.
- : [total, user, system] = cputime ();
-
Возвращает время, затраченное процессором вашей сессией Octave.
Первый вывод — общее время, затраченное на выполнение вашего процесса, и равно сумме второго и третьего выводов, которые представляют собой количество процессорных секунд, затраченных на выполнение в пользовательском режиме и количество процессорных секунд, затраченных на выполнение в системном режиме соответственно.
Если ваша система не имеет способа отслеживания использования времени процессора,
cputimeвозвращает 0 для каждого из его выходных значений.Обратите внимание, что поскольку Octave использовала некоторое время процессора для запуска, разумно проверить, работает ли
cputime, проверив, является ли общее используемое процессорное время ненулевым.
- : is_leap_year ()
- : is_leap_year (year)
-
Возвращает true, если year високосный год, и false в противном случае.
Если год не указан,
is_leap_yearиспользует текущий год.Например:
is_leap_year (2000) ⇒ 1
- : tic ()
- : id = tic ()
-
Инициализирует таймер реального времени.
Вызов
ticбез аргумента вывода сбрасывает внутренний таймер. Последующие вызовыtocвозвращают количество секунд с момента установки таймера.Если вызван с одним аргументом вывода,
ticсоздает новый экземпляр таймера и возвращает идентификатор таймера id. id — скаляр типаuint64, который может быть передан вtoc, чтобы проверить время выполнения по этому таймеру, а не по умолчанию внутреннему таймеру.Пример 1: тестирование кода с внутренним таймером
tic; # many computations later… elapsed_time = toc;
Пример 2: смешанный идентификатор таймера и внутренний таймер
tic; pause (1); toc ⇒ Elapsed time is 1.0089 seconds. id = tic; pause (2); toc (id) ⇒ Elapsed time is 2.01142 seconds. toc Elapsed time is 3.02308 seconds.
Вызов
ticиtocтаким образом позволяет вложенные вызовы тайминга.Если вы больше заинтересованы в процессорном времени, которое использовал ваш процесс, вы должны использовать функцию
cputimeвместо этого. Функцииticиtocсообщают фактическое время реальных часов, прошедшее между вызовами. Это может включать время, затраченное на обработку других задач или ничего не делая вообще.
- : toc ()
- : toc (id)
- : elapsed_time = toc (…)
-
Измеряет время, прошедшее по таймеру реального времени.
Без аргументов возвращает количество секунд, прошедших с момента последнего вызова
tic, по внутреннему таймеру.При указании идентификатора id конкретного таймера возвращает количество секунд, прошедших с момента инициализации таймера id.
См. tic, для примеров использования
tic/toc.
- : pause ()
- : pause (n)
- : old_state = pause ("on")
- : old_state = pause ("off")
- : old_state = pause ("query")
-
Приостанавливает выполнение программы или изменяет состояние функции приостановки.
Если вызвана без входных аргументов, то программа приостанавливается до ввода символа. Если аргумент n — положительное вещественное значение, оно указывает количество секунд, на которое программа будет приостановлена, например:
tic; pause (0.05); toc -| Elapsed time is 0.05039 seconds.Следующий пример выводит сообщение, а затем ожидает 5 секунд перед очисткой экрана.
disp ("wait please..."); pause (5); clc;Если вызвана со строковым аргументом
"on","off", или"query", состояние функции приостановки изменяется или запрашивается. Когда состояние"off", функция pause возвращается сразу. Необязательное возвращаемое значение содержит предыдущее состояние функции pause. В следующем примере функция pause отключена локально:old_state = pause ("off"); tic; pause (0.05); toc -| Elapsed time is 3.00407e-05 seconds. pause (old_state);Пока программа приостановлена, Octave по-прежнему обрабатывает отрисовку графиков и выполнение обратных вызовов графики.
См. также: kbhit.
- : дни = datenum (datevec)
- : дни = datenum (год, месяц, день)
- : дни = datenum (год, месяц, день, час)
- : дни = datenum (год, месяц, день, час, минута)
- : дни = datenum (год, месяц, день, час, минута, секунда)
- : дни = datenum ("datestr")
- : дни = datenum ("datestr", f)
- : дни = datenum ("datestr", p)
- : [дни, сек] = datenum (…)
-
Возвращает дату/время как порядковый номер дня, где 1 января 0000 определяется как день 1.
Целая часть,
floor (days), считает количество полных дней в дате ввода.Дробная часть,
rem (days, 1), соответствует времени в указанный день.Входные данные могут быть вектором дат (см.
datevec), строкой даты (см.datestr) или указаны непосредственно.При обработке входных строк дат, f — это строка формата, используемая для интерпретации строк дат (см.
datestr). Если формат f не указан, выполняется относительно медкий поиск по различным форматам. Всегда предпочтительнее указать строку формата f, если она известна. Форматы, не указывающие конкретного компонента времени, устанавливают значение в ноль. Форматы, не указывающие дату, по умолчанию принимают 1 января текущего года.p — это год в начале века, к которому будут отнесены двузначные годы. Если не указано, по умолчанию устанавливается текущий год минус 50.
Необязательный выходной параметр сек содержит время в указанный день с большей точностью, чем дни.
Примечания:
- Годы могут быть отрицательными и/или дробными.
- Месяцы меньше 1 считаются январем.
- Дни месяца начинаются с 1.
- Дни, превышающие конец месяца, переходят в последующие месяцы.
- Дни до начала месяца переходят к предыдущему месяцу.
- Дни могут быть дробными.
Внимание: datenums представляют определенное время для всей Земли. Они не учитывают часовые пояса (смещения во времени, основанные на местоположении), а также сезонные изменения из-за перехода на летнее время (смещения во времени, основанные на местных правилах). Следует учитывать, что можно создать datenums, которые, когда интерпретируются функцией, учитывающей часовой пояс и переходы на летнее время, такие как
datestr, не существуют или являются неоднозначными.Внимание: эта функция не пытается обрабатывать юлианские календари, поэтому даты до 15 октября 1582 года неверны на целых одиннадцать дней. Кроме того, следует учитывать, что только католические страны приняли календарь в 1582 году. Его повсеместное принятие произошло только к 1924 году. Подробнее см. статью в Википедии о григорианском календаре.
Предупреждение: високосные секунды игнорируются. Таблица високосных секунд доступна в статье Википедии о високосных секундах.
- : str = datestr (date)
- : str = datestr (date, f)
- : str = datestr (date, f, p)
-
Форматирует заданную дату/время в соответствии с форматом f и возвращает результат в str.
date — это серийный номер даты (см.
datenum), вектор дат (см.datevec), или строка или ячейный массив строк. В последнем случае он передаётся вdatevecдля определения формата входной даты.f может быть целым числом, которое соответствует одному из кодов в таблице ниже, или строкой формата даты.
p — это год в начале столетия, в котором двухзначные годы подлежат интерпретации. Если не указано, он по умолчанию равен текущему году минус 50.
Например, дата 730736.65149 (2000-09-07 15:38:09.0934) будет отформатирована следующим образом:
Код Формат Пример 0 дд-ммм-гггг ЧЧ:ММ:СС 07-Сен-2000 15:38:09 1 дд-ммм-гггг 07-Сен-2000 2 мм/дд/гг 09/07/00 3 ммм Сен 4 м С 5 мм 09 6 мм/дд 09/07 7 дд 07 8 сбк Чт 9 д Ч 10 гггг 2000 11 гг 00 12 мммгг Сен00 13 ЧЧ:ММ:СС 15:38:09 14 ЧЧ:ММ:СС ЧЧ 3:38:09 ПО 15 ЧЧ:ММ 15:38 16 ЧЧ:ММ ЧЧ 3:38 ПО 17 КВ-ГГ К3-00 18 КВ К3 19 дд/мм 07/09 20 дд/мм/гг 07/09/00 21 ммм.дд,гггг ЧЧ:ММ:СС Сен.07,2000 15:38:08 22 ммм.дд,гггг Сен.07,2000 23 мм/дд/гггг 09/07/2000 24 дд/мм/гггг 07/09/2000 25 гг/мм/дд 00/09/07 26 гггг/мм/дд 2000/09/07 27 КВ-ГГГГ К3-2000 28 мммгггг Сен2000 29 гггг-мм-дд 2000-09-07 30 ггггммддЧЧММСС 20000907T153808 31 гггг-мм-дд ЧЧ:ММ:СС 2000-09-07 15:38:08 Если f — это строка формата, следующие символы распознаются:
Символ Значение Пример гггг Полный год 2005 гг Год с двумя знаками 05 мммм Полное имя месяца Декабрь ммм Сокращённое имя месяца Дек мм Числовой номер месяца (с нулями) 01, 08, 12 м Первая буква имени месяца (заглавная) Д чччч Полное имя дня недели Воскресенье сбк Сокращённое имя дня недели Вск дд Число месяца (с нулями) 11 д Первая буква имени дня недели (заглавная) В ЧЧ Час, дополненный нулями 09:00 или пробелами, если установлено ПО 9:00 УТ ММ Минута (с нулями) 10:05 СС Секунда (с нулями) 10:05:03 МММ Миллисекунды (с нулями) 10:05:03.012 УТ Использовать 12-часовой формат времени 11:30 УТ ПО Использовать 12-часовой формат времени 11:30 ПО Если f не указан или равен
-1, используется 0, 1 или 16 в зависимости от того, пустая ли часть даты или времени в date.Если p не указан, он по умолчанию равен текущему году минус 50.
Если задана матрица или ячейный массив дат, возвращается столбец строк дат.
- : v = datevec (date)
- : v = datevec (date, f)
- : v = datevec (date, p)
- : v = datevec (date, f, p)
- : [y, m, d, h, mi, s] = datevec (…)
-
Преобразовать серийный номер даты (см.
datenum) или строку даты (см.datestr) в вектор даты.Вектор даты — это строка-вектор с шестью членами, представляющими год, месяц, день, час, минуту и секунду соответственно.
f — строка формата, используемая для интерпретации строк даты (см.
datestr). Если date является строкой, но формат не указан, выполняется относительно медкий поиск по различным форматам. Всегда предпочтительнее указать строку формата f, если она известна. Форматы, не определяющие конкретную компоненту времени, будут иметь значение, установленное в ноль. Форматы, не определяющие дату, будут по умолчанию устанавливать 1 января текущего года.p — год в начале века, к которому будут привязаны двухзначные годы. Если не указано, он по умолчанию равен текущему году минус 50.
- : d = addtodate (d, q, f)
-
Добавить значение q времени (с единицами f) к серийному числу datenum, d.
f должен быть одним из
"year","month","day","hour","minute","second", или"millisecond".
- : c = calendar ()
- : c = calendar (d)
- : c = calendar (y, m)
- : calendar (…)
-
Возвращает текущий ежемесячный календарь в матрице 6x7.
Если d указан, возвращает календарь для месяца, содержащего дату d, которая должна быть серийным номером даты или строкой даты.
Если y и m указаны, возвращает календарь для года y и месяца m.
Если не указаны выходные аргументы, календарь печатается на экране вместо возвращения матрицы.
- : [n, s] = weekday (d)
- : [n, s] = weekday (d, format)
-
Возвращает день недели как число в n и как строку в s.
Дни недели пронумерованы от 1 до 7, при этом первый день — воскресенье.
d — серийный номер даты или строка даты.
Если строка format отсутствует или равна
"short", то s будет содержать сокращенное имя дня недели. Если format равна"long", то s будет содержать полное имя.Таблица значений возврата, основанная на format:
n "short""long"1 Вс Воскресенье 2 Пн Понедельник 3 Вт Вторник 4 Ср Среда 5 Чт Четверг 6 Пт Пятница 7 Сб Суббота См. также: eomday, is_leap_year, calendar, datenum, datevec.
- : e = eomday (y, m)
-
Возвращает последний день месяца m для года y.
См. также: weekday, datenum, datevec, is_leap_year, calendar.
- : datetick ()
- : datetick (axis_str)
- : datetick (date_format)
- : datetick (axis_str, date_format)
- : datetick (…, "keeplimits")
- : datetick (…, "keepticks")
- : datetick (hax, …)
-
Добавляет метки делений оси в формате даты.
Ось, к которой применяются деления, определяется axis_str, которая может принимать значения
"x","y", или"z". Значение по умолчанию"x".Формат меток определяется переменной date_format, которая может быть строкой или положительным целым числом, которое
datestrпринимает.Если первый аргумент hax является дескриптором оси, то построение выполняется на этой оси, а не на текущей оси, возвращаемой
gca.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v6.4.0/Timing-Utilities.html