exponenta event banner

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

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

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

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

Можно указать часовой пояс для datetime массив, но это не обязательно. Фактически, по умолчанию datetime функция создает «незональный» 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 функция.

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

Юлианская дата - это количество дней (включая дробные дни) с полудня 24 ноября 4714 года до н. э., в пролептическом григорианском календаре, или 1 января 4713 года до н. э., в пролептическом юлианском календаре. Преобразовать 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 - это количество секунд (включая дробные секунды), прошедших с 00:00:00 1-Jan-1970 UTC (Universal Coordinated Time), игнорируя високосные секунды. Преобразовать 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

См. также

| | |

Связанные темы