В этом примере показано, как добавлять и вычитать значения даты и времени для вычисления будущих и прошлых дат и длительностей в точных единицах или единицах календаря. Можно добавлять, вычитать, умножать и делить массивы даты и времени так же, как эти операторы используются с другими типами данных MATLAB ®. Однако существует определенное поведение, специфичное для дат и времени.
Создайте скаляр 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 скаляр, представляющий 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
Добавьте количество календарных месяцев до 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 dtName 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