Можно преобразовать datetime массивы для представления точек времени в специализированных числовых форматах. Как правило, эти форматы представляют момент времени как количество секунд или дней, прошедших с указанной начальной точки. Например, юлианская дата - это количество дней и дробных дней, прошедших с начала юлианского периода. Время POSIX ® - это количество секунд, прошедших с 00:00:00 1-Jan-1970 UTC (универсальное координированное время). MATLAB ® обеспечивает juliandate и posixtime функции для преобразования datetime массивы к юлианским датам и временам POSIX.
В то время как datetime массивы не обязаны иметь часовой пояс, преобразуя их в «незональные» datetime значения для юлианских дат или времени POSIX могут привести к неожиданным результатам. Чтобы обеспечить ожидаемый результат, укажите часовой пояс перед преобразованием.
Можно указать часовой пояс для datetime массив, но это не обязательно. Фактически, по умолчанию datetime функция создает «незональный» datetime массив.
Создать datetime значение для текущей даты и времени.
d = datetime('now')d = datetime
23-Mar-2021 16:57:37
d создается по местному времени на компьютере и не имеет связанного с ним часового пояса. Во многих контекстах можно предположить, что можно обрабатывать время в незональном datetime массив как локальное время. Тем не менее, juliandate и posixtime функции обрабатывают время в незональных datetime массивы в формате UTC, а не локального времени. Во избежание двусмысленности рекомендуется избегать использования juliandate и posixtime на незональном datetime массивы. Например, избегайте использования posixtime(datetime('now')) в вашем коде.
Если ваш datetime массив имеет значения, которые не представляют UTC-времени, укажите часовой пояс с помощью TimeZone аргумент пары имя-значение так, что juliandate и posixtime интерпретировать datetime значения верны.
d = datetime('now','TimeZone','America/New_York')
d = datetime
23-Mar-2021 16:57:37
В качестве альтернативы можно указать TimeZone после создания массива.
d.TimeZone = 'America/Los_Angeles'd = datetime
23-Mar-2021 13:57:37
Для просмотра полного списка часовых поясов используйте timezones функция.
Юлианская дата - это количество дней (включая дробные дни) с полудня 24 ноября 4714 года до н. э., в пролептическом григорианском календаре, или 1 января 4713 года до н. э., в пролептическом юлианском календаре. Преобразовать datetime массивы к юлианским датам, используйте juliandate функция.
Создать datetime и укажите часовой пояс.
DZ = datetime('2016-07-29 10:05:24') + calmonths(1:3); DZ.TimeZone = 'America/New_York'
DZ = 1x3 datetime
29-Aug-2016 10:05:24 29-Sep-2016 10:05:24 29-Oct-2016 10:05:24
Новообращенный D к эквивалентным юлианским датам.
format longG
JDZ = juliandate(DZ)JDZ = 1×3
2457630.08708333 2457661.08708333 2457691.08708333
Создание незональной копии DZ. Новообращенный D к эквивалентным юлианским датам. Как D не имеет часового пояса, juliandate рассматривает время как время UTC.
D = DZ;
D.TimeZone = '';
JD = juliandate(D)JD = 1×3
2457629.92041667 2457660.92041667 2457690.92041667
Выдержать сравнение JDZ и JD. Разницы равны смещению часового пояса между UTC и America/New_York часовой пояс в дробных днях.
JDZ - JD
ans = 1×3
0.166666666511446 0.166666666511446 0.166666666511446
Время POSIX - это количество секунд (включая дробные секунды), прошедших с 00:00:00 1-Jan-1970 UTC (Universal Coordinated Time), игнорируя високосные секунды. Преобразовать datetime массивы до времени POSIX, используйте posixtime функция.
Создать datetime и укажите часовой пояс.
DZ = datetime('2016-07-29 10:05:24') + calmonths(1:3); DZ.TimeZone = 'America/New_York'
DZ = 1x3 datetime
29-Aug-2016 10:05:24 29-Sep-2016 10:05:24 29-Oct-2016 10:05:24
Новообращенный D эквивалентным временам POSIX.
PTZ = posixtime(DZ)
PTZ = 1×3
1472479524 1475157924 1477749924
Создание незональной копии DZ. Новообращенный D эквивалентным временам POSIX. Как D не имеет часового пояса, posixtime рассматривает время как время UTC.
D = DZ;
D.TimeZone = '';
PT = posixtime(D)PT = 1×3
1472465124 1475143524 1477735524
Выдержать сравнение PTZ и PT. Разницы равны смещению часового пояса между UTC и America/New_York часовой пояс в секундах.
PTZ - PT
ans = 1×3
14400 14400 14400
datetime | juliandate | posixtime | timezones