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

В этом примере показано, как добавить и вычесть значения даты и времени для вычисления будущих и прошлых дат и прошедших длительности в точных модулях или календарных модулях. Можно добавлять, вычитать, умножать и делить массивы дат и времени так же, как вы используете эти операторы с другими типами данных 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 возвращает продолжительность с точки зрения точного количества часов, минут и секунд.

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

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 года, третий datetime в 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

Каждый datetime в 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 календарных месяца. Результат отличается, потому что при добавлении календарной длительности к 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
   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

См. также

| |