Можно преобразовать массивы datetime
, чтобы представлять моменты времени в специализированных числовых форматах. В целом эти форматы представляют момент времени как номер секунд или дней, которые протекли начиная с заданной отправной точки. Например, дата Джулиана является номером дней и дробных дней, которые протекли с начала периода Джулиана. Время POSIX® является номером секунд, которые протекли с 0:00:00 1 января 1970 UTC (универсальное время). MATLAB® обеспечивает juliandate
и функции posixtime
, чтобы преобразовать массивы datetime
в даты Джулиана и времена POSIX.
В то время как массивы datetime
не требуются, чтобы иметь часовой пояс, преобразовывая "незонные" значения datetime
в даты Джулиана, или времена POSIX могут привести к неожиданным результатам. Чтобы гарантировать ожидаемый результат, задайте часовой пояс перед преобразованием.
Можно задать часовой пояс для массива datetime
, но вы не обязаны делать так. На самом деле по умолчанию функция datetime
создает "незонный" массив datetime
.
Создайте стоимость datetime
для текущей даты и время.
d = datetime('now')
d = datetime
21-Feb-2019 20:46:07
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
21-Feb-2019 20:46:07
Как альтернатива, можно задать свойство TimeZone
после того, как вы создадите массив.
d.TimeZone = 'America/Los_Angeles'
d = datetime
21-Feb-2019 17:46:07
Чтобы видеть полный список часовых поясов, используйте функцию timezones
.
Дата Джулиана является номером дней (включая дробные дни) с полудня 24 ноября, 4714 BCE, в преждевременном Григорианском календаре, или 1 января, 4713 BCE, в преждевременном юлианском календаре. Чтобы преобразовать массивы datetime
в даты Джулиана, используйте функцию juliandate
.
Создайте массив datetime
и задайте его часовой пояс.
DZ = datetime('2016-07-29 10:05:24') + calmonths(1:3); DZ.TimeZone = 'America/New_York'
DZ = 1x3 datetime array
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 является номером секунд (включая доли секунды), протек с 0:00:00 1 января 1970 UTC (универсальное время), игнорируя секунды прыжка. Чтобы преобразовать массивы datetime
во времена POSIX, используйте функцию posixtime
.
Создайте массив datetime
и задайте его часовой пояс.
DZ = datetime('2016-07-29 10:05:24') + calmonths(1:3); DZ.TimeZone = 'America/New_York'
DZ = 1x3 datetime array
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