Арифметические операции с датами и временами

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

Добавление и вычитание длительности к массиву datetime

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

t1 = datetime('now')
t1 = datetime
   21-Feb-2019 20:46:45

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

t2 = t1 + hours(1:3)
t2 = 1x3 datetime array
   21-Feb-2019 21:46:45   21-Feb-2019 22:46:45   21-Feb-2019 23:46:45

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

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

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

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

t2 = t1 - minutes(20:10:40)
t2 = 1x3 datetime array
   21-Feb-2019 20:26:45   21-Feb-2019 20:16:45   21-Feb-2019 20:06:45

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

t2 = t1 + [1:3]
t2 = 1x3 datetime array
   22-Feb-2019 20:46:45   23-Feb-2019 20:46:45   24-Feb-2019 20:46:45

Добавление к Datetime с часовым поясом

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

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

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

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

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

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

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

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

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

Добавьте много календарных дней в t1.

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

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

dt = diff(t3)
dt = 1x2 duration array
   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 array
   28-Feb-2014   31-Mar-2014   30-Apr-2014   31-May-2014

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

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

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

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

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

t2 = t1 + calyears(0:4)
t2 = 1x5 datetime array
   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 array
   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 календарных месяца. Результатом не является то же самое, потому что, когда вы добавляете календарную длительность в datetime, номер добавленных дней зависит от исходной даты.

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 array
   22-Feb-2019 20:46:45   23-Feb-2019 20:46:45   24-Feb-2019 20:46:45

t1 = datetime('yesterday')
t1 = datetime
   20-Feb-2019

dt = t2 - t1
dt = 1x3 duration array
    68:46:45    92:46:45   116:46:45

whos dt
  Name      Size            Bytes  Class       Attributes

  dt        1x3                40  duration              

dt содержит длительность в формате, hours:minutes:seconds.

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

dt.Format = 'd'
dt = 1x3 duration array
   2.8658 days   3.8658 days   4.8658 days

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

dt2 = 1.2*dt
dt2 = 1x3 duration array
   3.439 days   4.639 days   5.839 days

Вычисление прошедшего времени в календарных модулях

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

t1 = datetime('today')
t1 = datetime
   21-Feb-2019

t2 = t1 + calmonths(0:2) + caldays(4)
t2 = 1x3 datetime array
   25-Feb-2019   25-Mar-2019   25-Apr-2019

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

Смотрите также

| |