Well, the functions do different things.
First, there are two internal implementations of date/time: POSIXct
, which stores seconds since UNIX epoch (+some other data), and POSIXlt
, which stores a list of day, month, year, hour, minute, second, etc.
strptime
is a function to directly convert character vectors (of a variety of formats) to POSIXlt
format.
as.POSIXlt
converts a variety of data types to POSIXlt
. It tries to be intelligent and do the sensible thing – in the case of character, it acts as a wrapper to strptime
.
as.POSIXct
converts a variety of data types to POSIXct
. It also tries to be intelligent and do the sensible thing – in the case of character, it runs strptime
first, then does the conversion from POSIXlt
to POSIXct
.
It makes sense that strptime
is faster, because strptime
only handles character input whilst the others try to determine which method to use from input type. It should also be a bit safer in that being handed unexpected data would just give an error, instead of trying to do the intelligent thing that might not be what you want.