exponenta event banner

Арифметика даты и времени

В этом примере показано, как добавлять и вычитать значения даты и времени для вычисления будущих и прошлых дат и длительностей в точных единицах или единицах календаря. Можно добавлять, вычитать, умножать и делить массивы даты и времени так же, как эти операторы используются с другими типами данных MATLAB ®. Однако существует определенное поведение, специфичное для дат и времени.

Добавление и вычитание длительностей в массив Datetime

Создайте скаляр datetime. По умолчанию массивы datetime не связаны с часовым поясом.

t1 = datetime('now')
t1 = datetime
   23-Mar-2021 17:03:20

Найдите будущие моменты времени, добавив последовательность часов.

t2 = t1 + hours(1:3)
t2 = 1x3 datetime
   23-Mar-2021 18:03:20   23-Mar-2021 19:03:20   23-Mar-2021 20:03:20

Убедитесь, что разница между каждой парой значений datetime в t2 это 1 час.

dt = diff(t2)
dt = 1x2 duration
   01:00:00   01:00:00

diff возвращает длительность в виде точного количества часов, минут и секунд.

Вычтите последовательность минут из даты и времени, чтобы найти прошлые моменты времени.

t2 = t1 - minutes(20:10:40)
t2 = 1x3 datetime
   23-Mar-2021 16:43:20   23-Mar-2021 16:33:20   23-Mar-2021 16:23:20

Добавление числового массива к datetime массив. MATLAB ® обрабатывает каждое значение в числовом массиве как количество точных 24-часовых дней.

t2 = t1 + [1:3]
t2 = 1x3 datetime
   24-Mar-2021 17:03:20   25-Mar-2021 17:03:20   26-Mar-2021 17:03:20

Добавить в Datetime с часовым поясом

При работе со значениями datetime в разных часовых поясах или при необходимости учета изменений времени перехода на летнее время следует работать с массивами datetime, связанными с часовыми поясами. Создать datetime скаляр, представляющий 8 марта 2014 года в Нью-Йорке.

t1 = datetime(2014,3,8,0,0,0,'TimeZone','America/New_York')
t1 = datetime
   08-Mar-2014

Найдите будущие моменты времени, добавив последовательность дней фиксированной длины (24 часа).

t2 = t1 + days(0:2)
t2 = 1x3 datetime
   08-Mar-2014 00:00:00   09-Mar-2014 00:00:00   10-Mar-2014 01:00:00

Потому что переход на летнее время произошел 9 марта 2014 года, в третий раз t2 не происходит в полночь.

Убедитесь, что разница между каждой парой значений datetime в t2 составляет 24 часов.

dt = diff(t2)
dt = 1x2 duration
   24:00:00   24:00:00

Можно добавить фиксированную длительность в других единицах измерения, таких как годы, часы, минуты и секунды, добавив выходные данные years, hours, minutes, и seconds соответственно.

Чтобы учесть переход на летнее и зимнее время, необходимо использовать календарную продолжительность, а не продолжительность. Продолжительность календаря учитывает переход на летнее время, когда они добавляются к значениям datetime или вычитаются из них.

Добавить количество календарных дней к t1.

t3 = t1 + caldays(0:2)
t3 = 1x3 datetime
   08-Mar-2014   09-Mar-2014   10-Mar-2014

Посмотреть, что разница между каждой парой значений datetime в t3 не всегда 24 часов из-за перехода на летнее время, произошедшего 9 марта.

dt = diff(t3)
dt = 1x2 duration
   24:00:00   23:00:00

Добавление продолжительности календаря в массив Datetime

Добавьте количество календарных месяцев до 31 января 2014 года.

t1 = datetime(2014,1,31)
t1 = datetime
   31-Jan-2014

t2 = t1 + calmonths(1:4)
t2 = 1x4 datetime
   28-Feb-2014   31-Mar-2014   30-Apr-2014   31-May-2014

Каждое значение даты и времени в t2 происходит в последний день каждого месяца.

Вычислите разницу между каждой парой значений datetime в t2 с точки зрения количества календарных дней с использованием caldiff функция.

dt = caldiff(t2,'days')
dt = 1x3 calendarDuration
   31d   30d   31d

Количество дней между последовательными парами значений datetime в dt не всегда совпадает, поскольку разные месяцы состоят из другого количества дней.

Добавьте количество календарных лет до 31 января 2014 года.

t2 = t1 + calyears(0:4)
t2 = 1x5 datetime
   31-Jan-2014   31-Jan-2015   31-Jan-2016   31-Jan-2017   31-Jan-2018

Вычислите разницу между каждой парой значений datetime в t2 с точки зрения количества календарных дней с использованием caldiff функция.

dt = caldiff(t2,'days')
dt = 1x4 calendarDuration
   365d   365d   366d   365d

Количество дней между последовательными парами значений datetime в dt не всегда одинаково, потому что 2016 год является високосным и имеет 366 дней.

Вы можете использовать calquarters, calweeks, и caldays для создания массивов календарных кварталов, календарных недель или календарных дней, добавляемых или вычитаемых из массивов datetime.

Добавление продолжительности календаря не является коммутативным. При добавлении нескольких calendarDuration массив в datetime, MATLAB ® добавляет их в том порядке, в котором они отображаются в команде.

Добавить 3 календарных месяца, а затем 30 календарных дней до 31 января 2014 года.

t2 = datetime(2014,1,31) + calmonths(3) + caldays(30)
t2 = datetime
   30-May-2014

Сначала добавьте 30 календарных дней к той же дате, а затем добавьте 3 календарных месяца. Результат не совпадает, поскольку при добавлении календарной длительности к дате и времени количество добавленных дней зависит от исходной даты.

t2 = datetime(2014,1,31) + caldays(30) + calmonths(3)
t2 = datetime
   02-Jun-2014

Арифметика длительности календаря

Создайте две календарные длительности, а затем найдите их сумму.

d1 = calyears(1) + calmonths(2) + caldays(20)
d1 = calendarDuration
   1y 2mo 20d

d2 = calmonths(11) + caldays(23)
d2 = calendarDuration
   11mo 23d

d = d1 + d2
d = calendarDuration
   2y 1mo 43d

При суммировании двух или более календарных длительностей число месяцев, превышающих 12, переносится на несколько лет. Однако большое количество дней не переносится на несколько месяцев, потому что разные месяцы состоят из разного количества дней.

Увеличение d умножая его на коэффициент 2. Значения длительности календаря должны быть целыми числами, поэтому их можно умножить только на целочисленные значения.

2*d
ans = calendarDuration
   4y 2mo 86d

Расчет затраченного времени в точных единицах

Вычесть один datetime массив из другого для вычисления прошедшего времени в терминах точного количества часов, минут и секунд.

Найдите точный промежуток времени между последовательностью значений datetime и началом предыдущего дня.

t2 = datetime('now') + caldays(1:3)
t2 = 1x3 datetime
   24-Mar-2021 17:03:21   25-Mar-2021 17:03:21   26-Mar-2021 17:03:21

t1 = datetime('yesterday')
t1 = datetime
   22-Mar-2021

dt = t2 - t1
dt = 1x3 duration
    65:03:21    89:03:21   113:03:21

whos dt
  Name      Size            Bytes  Class       Attributes

  dt        1x3                40  duration              

dt содержит длительности в формате, часы: минуты: секунды.

Просмотр истекших длительностей в единицах дней путем изменения Format имущество dt.

dt.Format = 'd'
dt = 1x3 duration
   2.7107 days   3.7107 days   4.7107 days

Масштабирование значений длительности путем умножения dt в 1,2 раза. Поскольку длительности имеют точную длину, их можно умножить и разделить на дробные значения.

dt2 = 1.2*dt
dt2 = 1x3 duration
   3.2528 days   4.4528 days   5.6528 days

Расчет затраченного времени в единицах календаря

Используйте between для поиска количества календарных лет, месяцев и дней, прошедших между двумя датами.

t1 = datetime('today')
t1 = datetime
   23-Mar-2021

t2 = t1 + calmonths(0:2) + caldays(4)
t2 = 1x3 datetime
   27-Mar-2021   27-Apr-2021   27-May-2021

dt = between(t1,t2)
dt = 1x3 calendarDuration
       4d   1mo 4d   2mo 4d

См. также

| |