Можно преобразовать 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