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), соответствует текущему времени.
-
:
str =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.
-
:
str =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-часовое (чч:мм:сс [AM/PM]).
%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, а другие предоставляются, потому что они полезны.
-
:
datevec =clock()¶ -
:
[datevec, isdst] =clock()¶ -
Возвращает текущую локальную дату и время в виде вектора даты.
Вектор даты содержит следующие поля: текущий год, месяц (1-12), день (1-31), час (0-23), минуту (0-59) и секунду (0-61). Поле секунд содержит дробную часть после десятичной точки для расширенной точности.
Необязательный второй вывод isdst — истина, если летнее время (DST) действует для часового пояса системы.
Например:
fix (clock ()) ⇒ 1993 8 20 4 56 1
clockболее точен на системах, которые имеют функциюgettimeofday.
-
:
str =date()¶ -
Возвращает текущую дату в виде строки в формате ДД-MMM-ГГГГ.
Например:
date () ⇒ 20-Aug-1993
-
:
secs =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","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 января текущего года.При передаче отдельных аргументов year, month, day и т. д., каждый из них может быть скаляром или массивом, отличным от скаляра. Аргументы, отличные от скаляров, должны быть всех одинакового размера. Скалярные входные данные будут расширены до размера входных данных, отличных от скаляров.
p — год в начале века, к которому будут отнесены двухзначные годы. Если не указан, по умолчанию принимается текущий год минус 50.
Необязательный выходной параметр secs содержит время в указанный день с большей точностью, чем days.
Примечания:
- Годы могут быть отрицательными и/или дробными.
- Месяцы ниже 1 считаются январём.
- Дни месяца начинаются с 1.
- Дни, выходящие за пределы месяца, попадают в последующие месяцы.
- Дни до начала месяца попадают в предыдущий месяц.
- Дни могут быть дробными.
Примеры:
Convert from datestrs: d = datenum ("1966-06-14") ⇒ d = 718232 d = datenum ({"1966-06-14", "1966-06-15", "1966-06-16"}) ⇒ d = 718232 718233 718234 Convert from datevec: d = datenum ([1966 06 14]) ⇒ d = 718232 d = datenum ([1966 06 14 23 59 59]) ⇒ d = 718232.9999884259 Specify date components separately: d = datenum (1966, 6, 14) ⇒ d = 718232 d = datenum (1966, magic(3), 1) ⇒ d = 718280 718068 718219 718127 718188 718249 718158 718311 718099Внимание: datenums представляют определённое время для Земли в целом. Они не учитывают часовые пояса (сдвиги во времени на основе местоположения) или сезонные изменения из-за летнего времени (сдвиги во времени на основе местного регулирования). Следует знать, что можно создавать datenums, которые, когда интерпретируются функцией, учитывающей сдвиги часовых поясов и летнего времени, например,
datestr, являются несуществующими или неоднозначными.Внимание: данная функция не пытается обрабатывать юлианские календари, поэтому даты до 15 октября 1582 года ошибочны на 11 дней. Кроме того, следует знать, что только католические страны приняли календарь в 1582 году. Он был принят во всех странах только к 1924 году. См. страницу Википедии о григорианском календаре для получения дополнительной информации.
Предупреждение: високосные секунды игнорируются. Таблица високосных секунд доступна на странице Википедии о високосных секундах.
Алгоритм: Питер Баум (http://vsg.cape.com/~pbaum/date/date0.htm)
-
:
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 мммм Полное название месяца Декабрь ммм Сокращённое название месяца Дек мм Число месяца (заполняется нулями) 01, 08, 12 м Первая буква названия месяца (заглавная) Д дддд Полное название дня недели Воскресенье сбб Сокращённое название дня недели Вск дд Число месяца (заполняется нулями) 11 д Первая буква названия дня недели (заглавная) В ЧЧ Часы (заполняются нулями) 09:00 или заполняются пробелами, если указан PM 9:00 AM ММ Минуты (заполняются нулями) 10:05 СС Секунды (заполняются нулями) 10:05:03 МММ Миллисекунды (заполняются нулями) 10:05:03.012 AM Использовать 12-часовой формат времени 11:30 AM PM Использовать 12-часовой формат времени 11:30 PM Если 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) в вектор даты.Вектор даты — это строка-вектор с шестью элементами, представляющими год, месяц, день, час, минуту и секунды соответственно.
Входные данные числового номера даты могут быть скаляром или массивом. Входные данные строки даты могут быть одной строкой даты, двумерным символьным массивом дат, где каждая строка — это строка даты, или ячейным массивом строк любой размерности, где каждый ячейный элемент содержит одну строку даты.
v — двумерный массив векторов дат, по одному вектору даты на строку. Для входных массивов порядок v основан на порядке следования дат в data в порядке следования столбцов.
f — строка формата, используемая для интерпретации строк даты (см.
datestr). Если date — строка или ячейный массив строк, но формат не указан, используется эвристика для определения формата входных данных. Эта эвристика может привести к совпадениям, которые отличаются от результатов, ожидаемых пользователем. Кроме того, это предполагает относительно медкий поиск различных форматов. Всегда предпочтительнее указывать строку формата f, если она известна. Форматы, не указывающие конкретного компонента времени, будут иметь значение, равное нулю. Форматы, не указывающие конкретного компонента даты, будут по умолчанию принимать этот компонент как 1 января текущего года. Конечные символы игнорируются для расчёта вектора даты, даже если символы содержат дополнительную информацию о времени/дате.p — год в начале века, к которому будут относиться двухзначные годы. Если не указано, по умолчанию используется текущий год минус 50.
-
:
d =addtodate(d, q, f)¶ -
Добавить значение q времени (с единицами f) к последовательному числу даты 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–2023 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/v9.2.0/Timing-Utilities.html