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

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

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

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

| | |

Похожие темы