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

Можно преобразовать datetime массивы для представления точек во времени в специализированных числовых форматах. В целом эти форматы представляют момент времени как количество секунд или дней, прошедших с заданной начальной точки. Например, юлианская дата - это количество дней и дробных дней, прошедших с начала юлианского периода. Время POSIX ® - это количество секунд, прошедших с 00:00:00 1-Jan-1970 UTC (универсальное скоординированное время). MATLAB ® предоставляет juliandate и posixtime функции для преобразования datetime массивы по юлианским датам и временам POSIX.

Пока datetime массивы не обязаны иметь часовой пояс, преобразуя «unzoned» datetime значения юлианских дат или POSIX раз могут привести к неожиданным результатам. Чтобы гарантировать ожидаемый результат, задайте часовой пояс перед преобразованием.

Задайте часовой пояс перед преобразованием

Можно задать часовой пояс для datetime массив, но вы не обязаны этого делать. Фактически, по умолчанию datetime функция создает «unzoned» datetime массив.

Создайте datetime значение для текущей даты и времени.

d = datetime('now')
d = datetime
   23-Mar-2021 16:57:37

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
   23-Mar-2021 16:57:37

В качестве альтернативы можно задать TimeZone свойство после создания массива.

d.TimeZone = 'America/Los_Angeles'
d = datetime
   23-Mar-2021 13:57:37

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

Преобразование значений Zoned и Unzoned Datetime в юлианские даты

Юлианская дата - количество дней (включая дробные дни) с полудня 24 ноября 4714 года до н. э., в пролептическом григорианском календаре, или 1 января 4713 года до н. э., в пролептическом юлианском календаре. Преобразование datetime arrays to Julian dates, используйте 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

Преобразуйте значения Zoned и Unzoned Datetime в POSIX-времена

Время POSIX - это количество секунд (включая дробные секунды), прошедшее с 00:00:00 1-Jan-1970 UTC (универсальное скоординированное время), игнорирующее високосные секунды. Преобразование datetime arrays to POSIX time, используйте 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

См. также

| | |

Похожие темы