Note that the date-time processing functions in stringx are a work in progress. Feature requests/comments/remarks are welcome.
strptime parses strings representing date-time data
and converts it to a date-time object.
strftime formats a date-time object and outputs it as a
character vector.
The functions are meant to be compatible with each other,
especially with regards to formatting/printing. This is why
they return/deal with objects of a new class, POSIXxt, which
expends upon the built-in POSIXct.
strptime(x, format, tz = "", lenient = FALSE, locale = NULL)strftime(
x,
format = "%Y-%m-%dT%H:%M:%S%z",
tz = attr(x, "tzone")[1L],
usetz = FALSE,
...,
locale = NULL
)
# S3 method for POSIXxt
format(
x,
format = "%Y-%m-%dT%H:%M:%S%z",
tz = attr(x, "tzone")[1L],
usetz = FALSE,
...,
locale = NULL
)
is.POSIXxt(x)
as.POSIXxt(x, tz = "", ...)
# S3 method for POSIXt
as.POSIXxt(x, tz = attr(x, "tzone")[1L], ...)
# S3 method for POSIXxt
as.POSIXlt(x, tz = attr(x, "tzone")[1L], ..., locale = NULL)
# S3 method for default
as.POSIXxt(x, tz = "", ...)
# S3 method for POSIXxt
as.Date(x, ...)
# S3 method for Date
as.POSIXxt(x, ...)
# S3 method for character
as.POSIXxt(x, tz = "", format = NULL, ..., lenient = FALSE, locale = NULL)
# S3 method for POSIXxt
Ops(e1, e2)
# S3 method for POSIXxt
seq(from, to, by, length.out = NULL, along.with = NULL, ...)
# S3 method for POSIXxt
c(..., recursive = FALSE)
# S3 method for POSIXxt
rep(..., recursive = FALSE)
strftime and format return a character vector (in UTF-8).
strptime, as.POSIXxt.Date,
and asPOSIXxt.character return an object
of class POSIXxt, which
extends upon POSIXct,
see also DateTimeClasses.
Subtraction returns an object of the class difftime,
see difftime.
If a string cannot be recognised as valid date/time specifier
(as per the given format string), the corresponding output will be NA.
object to be converted: a character vector for strptime
and as.POSIXxt.character,
an object of class POSIXxt for strftime
an object of class Date for as.POSIXxt.Date,
or objects coercible to
character vector of date-time format specifiers,
see stri_datetime_fstr;
e.g., "%Y-%m-%d" or "datetime_full";
the default conforms to the ISO 8601 guideline
NULL or '' for the default time zone
(see stri_timezone_get)
or a single string with a timezone identifier,
see stri_timezone_list;
note that when x is equipped with tzone attribute,
this datum is used;
as.POSIXxt.character treats dates as being at midnight local time
single logical value; should date/time parsing be lenient?
NULL or '' for the default locale
(see stri_locale_get)
or a single string with a locale identifier,
see stri_locale_list
not used (with a warning if attempting to do so) [DEPRECATED]
not used
Replacements for base strptime
and strftime implemented with
stri_datetime_parse and
stri_datetime_format.
format.POSIXxt is a thin wrapper around strftime.
formatting/parsing date-time in different locales and calendars is difficult and non-portable across platforms [fixed here -- using services provided by ICU]
default format not conforming to ISO 8601, in particular not displaying the current time zone [fixed here]
only the names attribute in x is propagated
[fixed here]
partial recycling with no warning [fixed here]
strptime returns an object of class POSIXlt,
which is not the most convenient to work with, e.g., when
including in data frames
[fixed here]
Ideally, there should be only one class to represent dates
and one to represent date/time; POSIXlt
is no longer needed as we have
stri_datetime_fields;
our new POSIXxt class aims to solve the underlying problems
with POSIXct's not being consistent with regards to
working in different time zones and dates
(see, e.g., as.Date(as.POSIXct(strftime(Sys.Date()))))
[addressed here]
dates without times are not always treated as being at midnight
(despite that being stated in the help page for as.POSIXct)
[fixed here]
strftime does not honour the tzone attribute,
which is used whilst displaying time (via format)
[fixed here]
Note that the ISO 8601 guideline suggests a year-month-day
date format and a 24-hour time format always indicating the effective
time zone, e.g., 2015-12-31T23:59:59+0100. This is so as to avoid
ambiguity.
When parsing strings, missing fields are filled based on today's midnight data.
The official online manual of stringx at https://stringx.gagolewski.com/
Related function(s): sprintf, ISOdatetime
strftime(Sys.time()) # default format - ISO 8601
f <- c("date_full", "%Y-%m-%d", "date_relative_short", "datetime_full")
strftime(Sys.time(), f) # current default locale
strftime(Sys.time(), f, locale="de_DE")
strftime(Sys.time(), "date_short", locale="en_IL@calendar=hebrew")
strptime("1970-01-01 00:00:00", "%Y-%m-%d %H:%M:%S", tz="GMT")
strptime("14 Nisan 5703", "date_short", locale="en_IL@calendar=hebrew")
as.POSIXxt("1970-01-01")
as.POSIXxt("1970/01/01 12:00")
Run the code above in your browser using DataLab