Можно преобразовать 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
29-Jan-2020 12:40:27
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
29-Jan-2020 12:40:27
Как альтернатива, можно задать TimeZone
свойство после того, как вы создаете массив.
d.TimeZone = 'America/Los_Angeles'
d = datetime
29-Jan-2020 09:40:27
Чтобы видеть полный список часовых поясов, используйте 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
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
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