Преобразование даты и время к Юлианской дате или POSIX-время

Можно преобразовать 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
   24-Aug-2021 23:44:35

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
   24-Aug-2021 23:44:35

Как альтернатива, можно задать TimeZone свойство после того, как вы создаете массив.

d.TimeZone = 'America/Los_Angeles'
d = datetime
   24-Aug-2021 20:44:35

Чтобы видеть полный список часовых поясов, используйте timezones функция.

Преобразование зонных и незонных значений Datetime в Юлианские даты

Юлианская дата является номером дней (включая дробные дни) с полудня 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

    2.4576    2.4577    2.4577

Создайте незонную копию DZ. Преобразуйте D на эквивалентные даты Джулиана. Как D нет времени зона, juliandate обрабатывает времена как времена UTC.

D = DZ;
D.TimeZone = '';
JD = juliandate(D)
JD = 1×3

    2.4576    2.4577    2.4577

Сравните JDZ и JD. Различия равны перемещению часового пояса между UTC и America/New_York часовой пояс в дробные дни.

JDZ - JD 
ans = 1×3

    0.1667    0.1667    0.1667

Преобразование зонных и незонных значений Datetime в POSIX-времена

Время 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

    1.4725    1.4752    1.4777

Создайте незонную копию DZ. Преобразуйте D к эквивалентным временам POSIX. Как D нет времени зона, posixtime обрабатывает времена как времена UTC.

D = DZ;
D.TimeZone = '';
PT = posixtime(D)
PT = 1×3

    1.4725    1.4751    1.4777

Сравните PTZ и PT. Различия равны перемещению часового пояса между UTC и America/New_York часовой пояс в секундах.

PTZ - PT
ans = 1×3

       14400       14400       14400

Смотрите также

| | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте