Разница между as.POSIXct / as.POSIXlt и strptime для преобразования символьных векторов в POSIXct / POSIXlt
===========================================================================================================

Я следил за рядом вопросов, которые спрашивают о том, как преобразовать векторы символов в классы даты и времени. Я часто вижу 2 метода, strptime и as.POSIXct / as.POSIXlt. Я посмотрел на 2 функции, но неясно, в чем разница.

strptime

as.POSIXct

as.POSIXlt

Делаем микробенчмарк, чтобы увидеть, есть ли различия в производительности:

strptime кажется немного быстрее. так что дает? с какой стати было бы 2 похожих функции или есть различия между ними, которые я пропустил?

Ну, функции делают разные вещи.

Во-первых, есть две внутренние реализации даты / времени:`POSIXct`, который хранит секунды, начиная с эпохи UNIX (+ некоторые другие данные), и`POSIXlt`, который хранит список дня, месяца, года, часа, минуты, секунды и т. д.

`strptime` это функция для прямого преобразования векторов символов (различных форматов) в`POSIXlt` формат.

`as.POSIXlt` преобразует различные типы данных в`POSIXlt`, Он пытается быть умным и делать разумные вещи - в случае персонажа он действует как обертка для`strptime`.

`as.POSIXct` преобразует различные типы данных в`POSIXct`, Он также пытается быть разумным и делать разумные вещи - в случае с персонажем, он работает`strptime` сначала выполняется преобразование из`POSIXlt` в`POSIXct`.

Это имеет смысл, что`strptime` быстрее, потому что`strptime` только обрабатывает ввод символов, в то время как другие пытаются определить, какой метод использовать из типа ввода. Также должно быть немного безопаснее, потому что передача непредвиденных данных просто выдаст ошибку, вместо того, чтобы пытаться сделать разумную вещь, которая может не соответствовать вашим ожиданиям.



Существует два типа POSIXt, POSIXct и POSIXlt. & Quot; кт & Quot; может стоять за календарное время, он хранит количество секунд с начала координат. «lt» или местное время сохраняет дату в виде списка атрибутов времени (таких как «час» и «пн»).
Попробуйте эти примеры: