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