В этом примере показано, как добавить и вычесть значения даты и времени, чтобы вычислить будущие и прошлые даты и протек длительность в точных модулях или календарных модулях. Можно добавить, вычесть, умножить и разделить массивы даты и времени таким же образом, что вы используете эти операторы с другими типами данных MATLAB®. Однако существует некоторое поведение, которое характерно для дат и время.
Создайте скаляр datetime. По умолчанию массивы datetime не сопоставлены с часовым поясом.
t1 = datetime('now')
t1 = datetime
29-Jan-2020 12:41:18
Найдите моменты в будущем вовремя путем добавления последовательности часов.
t2 = t1 + hours(1:3)
t2 = 1x3 datetime
29-Jan-2020 13:41:18 29-Jan-2020 14:41:18 29-Jan-2020 15:41:18
Проверьте что различие между каждой парой значений 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
29-Jan-2020 12:21:18 29-Jan-2020 12:11:18 29-Jan-2020 12:01:18
Добавьте числовой массив в datetime
массив. MATLAB® обрабатывает каждое значение в числовом массиве как много точных, 24-часовых дней.
t2 = t1 + [1:3]
t2 = 1x3 datetime
30-Jan-2020 12:41:18 31-Jan-2020 12:41:18 01-Feb-2020 12:41:18
Если вы работаете со значениями 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
часы
минуты
, и 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
30-Jan-2020 12:41:19 31-Jan-2020 12:41:19 01-Feb-2020 12:41:19
t1 = datetime('yesterday')
t1 = datetime
28-Jan-2020
dt = t2 - t1
dt = 1x3 duration
60:41:19 84:41:19 108:41:19
whos dt
Name Size Bytes Class Attributes dt 1x3 40 duration
dt
содержит длительность в формате, hours:minutes:seconds.
Просмотрите прошедшую длительность в модулях дней путем изменения Format
свойство dt
.
dt.Format = 'd'
dt = 1x3 duration
2.5287 days 3.5287 days 4.5287 days
Масштабируйте значения длительности путем умножения dt
фактором 1,2. Поскольку длительность имеет точную длину, можно умножить и разделить их на дробные значения.
dt2 = 1.2*dt
dt2 = 1x3 duration
3.0344 days 4.2344 days 5.4344 days
Используйте between
функционируйте, чтобы найти номер календарных лет, месяцев, и дни протекли между двумя датами.
t1 = datetime('today')
t1 = datetime
29-Jan-2020
t2 = t1 + calmonths(0:2) + caldays(4)
t2 = 1x3 datetime
02-Feb-2020 04-Mar-2020 02-Apr-2020
dt = between(t1,t2)
dt = 1x3 calendarDuration
4d 1mo 4d 2mo 4d