Можно преобразовать datetime массивы для представления точек во времени в специализированных числовых форматах. В целом эти форматы представляют момент времени как количество секунд или дней, прошедших с заданной начальной точки. Например, юлианская дата - это количество дней и дробных дней, прошедших с начала юлианского периода. Время POSIX ® - это количество секунд, прошедших с 00:00:00 1-Jan-1970 UTC (универсальное скоординированное время). MATLAB ® предоставляет juliandate и posixtime функции для преобразования datetime массивы по юлианским датам и временам POSIX.
Пока datetime массивы не обязаны иметь часовой пояс, преобразуя «unzoned» datetime значения юлианских дат или POSIX раз могут привести к неожиданным результатам. Чтобы гарантировать ожидаемый результат, задайте часовой пояс перед преобразованием.
Можно задать часовой пояс для datetime массив, но вы не обязаны этого делать. Фактически, по умолчанию datetime функция создает «unzoned» 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 arrays to Julian dates, используйте 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 (универсальное скоординированное время), игнорирующее високосные секунды. Преобразование datetime arrays to POSIX time, используйте 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