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.
- : 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"Функция
strftimeOctave поддерживает надмножество спецификаторов полей 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-часовое (чч:мм:сс [AP]M).
%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, проверив, является ли общее использованное процессорное время ненулевым.
- : 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", функция паузы возвращает значение немедленно. Необязательное возвращаемое значение содержит предыдущее состояние функции паузы. В следующем примере пауза отключена локально:old_state = pause ("off"); tic; pause (0.05); toc -| Elapsed time is 3.00407e-05 seconds. pause (old_state);Пока программа приостановлена, Octave все равно обрабатывает отрисовку графиков и выполнение обратных вызовов графики.
См. также: kbhit.
- : days = datenum (datevec) ¶
- : days = datenum (year, month, day) ¶
- : days = datenum (year, month, day, hour) ¶
- : days = datenum (year, month, day, hour, minute) ¶
- : days = datenum (year, month, day, hour, minute, second) ¶
- : days = datenum ("datestr") ¶
- : days = datenum ("datestr", f) ¶
- : days = datenum ("datestr", p) ¶
- : [days, secs] = datenum (…) ¶
-
Возвращает дату/время входных данных как порядковый номер дня, где 1 января 0000 определено как день 1.
Целая часть,
floor (days)подсчитывает количество полных дней на входе даты.Дробная часть,
rem (days, 1)соответствует времени в данный день.Входные данные могут быть вектором даты (см.
datevec), строкой даты (см.datestr) или указаны напрямую.При обработке входных строк даты, f — это строка формата, используемая для интерпретации строк даты (см.
datestr). Если формат f не указан, выполняется относительно медкий поиск по различным форматам. Всегда предпочтительно указать строку формата f, если она известна. Форматы, которые не указывают конкретную составляющую времени, будут иметь значение, установленное в ноль. Форматы, которые не указывают дату, по умолчанию установлены на 1 января текущего года.p — это год в начале века, к которому будут отнесены двузначные годы. Если не указано, по умолчанию принимается текущий год минус 50.
Необязательный выходной secs содержит время в указанный день с большей точностью, чем days.
Примечания:
- Годы могут быть отрицательными и/или дробными.
- Месяцы ниже 1 считаются январем.
- Дни месяца начинаются с 1.
- Дни за пределами конца месяца попадают в последующие месяцы.
- Дни до начала месяца переходят к предыдущему месяцу.
- Дни могут быть дробными.
Внимание: datenums представляют определенное время для всей Земли. Они не учитывают часовые пояса (смещения во времени, основанные на местоположении), ни сезонные изменения из-за летнего времени (смещения во времени, основанные на местном регулировании). Следует учитывать, что возможно создание datenums, которые, когда интерпретируются функцией, учитывающей часовой пояс и смещения по Летнему времени, такие как
datestr, являются несуществующими или неоднозначными.Внимание: эта функция не пытается обработать юлианские календари, поэтому даты до 15 октября 1582 года неверны на 11 дней. Кроме того, следует учитывать, что только католические страны приняли календарь в 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 ЧЧ:ММ:СС ЧЧ 15:38:09 ПО 15 ЧЧ:ММ 15:38 16 ЧЧ:ММ ЧЧ 15: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 mmmm Полное название месяца Декабрь mmm Сокращенное название месяца Дек мм Числовой номер месяца (дополняется нулями) 01, 08, 12 м Первая буква названия месяца (заглавная) Д dddd Полное название дня недели Воскресенье сб Сокращенное название дня недели Вск дд Число месяца (дополняется нулями) 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/v7.2.0/Timing-Utilities.html