Преобразование даты и время к Юлианской дате или 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
   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 функция.

Преобразование зонных и незонных значений 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

          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

Преобразование зонных и незонных значений 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

                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

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

| | |

Похожие темы