strptime {base} | R Documentation |
Functions to convert between character representations and objects of
classes "POSIXlt"
and "POSIXct"
representing calendar
dates and times.
## S3 method for class 'POSIXct': format(x, format = "", tz = "", usetz = FALSE, ...) ## S3 method for class 'POSIXlt': format(x, format = "", usetz = FALSE, ...) ## S3 method for class 'POSIXt': as.character(x, ...) strftime(x, format="", usetz = FALSE, ...) strptime(x, format, tz = "") ISOdatetime(year, month, day, hour, min, sec, tz = "") ISOdate(year, month, day, hour = 12, min = 0, sec = 0, tz = "GMT")
x |
An object to be converted. |
tz |
A timezone specification to be used for the conversion.
System-specific, but "" is the current time zone, and
"GMT" is UTC. |
format |
A character string. The default is
"%Y-%m-%d %H:%M:%S" if any component has a time
component which is not midnight, and "%Y-%m-%d"
otherwise. If options("digits.secs") is set, up to
the specified number of digits will be printed for seconds. |
... |
Further arguments to be passed from or to other methods. |
usetz |
logical. Should the timezone be appended to the output?
This is used in printing times, and as a workaround for problems with
using "%Z" on most Linux systems. |
year, month, day |
numerical values to specify a day. |
hour, min, sec |
numerical values for a time within a day. Fractional seconds are allowed. |
strftime
is an alias for format.POSIXlt
, and
format.POSIXct
first converts to class "POSIXlt"
by
calling as.POSIXlt
. Note that only that conversion
depends on the time zone.
The usual vector re-cycling rules are applied to x
and
format
so the answer will be of length that of the longer of the
vectors.
Locale-specific conversions to and from character strings are used
where appropriate and available. This affects the names of the days
and months, the AM/PM indicator (if used) and the separators in
formats such as %x
and %X
.
The details of the formats are system-specific, but the following are
defined by the ISO C / POSIX standard for strftime
and are
likely to be widely available. A conversion specification is
introduced by %
, usually followed by a single letter or
O
or E
and then a single letter.
Any character in the format string not part of a conversion specification
is interpreted literally (and %%
gives %
). Widely
implemented conversion specifications include
%a
%A
%b
%B
%c
%d
%H
%I
%j
%m
%M
%p
%I
and not with %H
.%S
%U
%w
%W
%x
%X
%y
%Y
%z
, %Z
%z
this differs
from POSIX.
Where leading zeros are shown they will be used on output but are
optional on input.
Windows allows the modifier #
in conversion specifications for
output: %#c
and %#x
use longer forms, and for
dHIjmMSUwWyY
leading zeros are suppressed.
Also defined in the current standards but less widely implemented (e.g. not for output on Windows) are
%C
%D
%m/%d/%y
: ISO C99 says it should be that exact format.%e
%F
%g
%V
). (Typically accepted but ignored on input.)%G
%V
) as a decimal
number. (Typically accepted but ignored on input.)%h
%b
.%k
%l
%n
%r
%R
%H:%M
.%t
%T
%H:%M:%S
.%u
%V
For output (and possibly input) there are also %O[dHImMUVwWy]
which may emit numbers in an alternative locale-dependent format
(e.g. roman numerals), and %E[cCyYxX]
which can use an
alternative ‘era’ (e.g. a different religious calendar). Which
of these are supported is OS-dependent.
Specific to R is %OSn
, which for output gives the
seconds to 0 <= n <= 6
decimal places (and if %OS
is
not followed by a digit, it uses the setting of
getOption("digits.secs")
, or if that is unset, n = 3
).
Further, for strptime
%OS
will input seconds including
fractional seconds.
The behaviour of other conversion specifications (and even if other
character sequences commencing with %
are conversion
specifications) is system-specific.
For output on Windows, a coversion specification is %
optionally followed by #
and then by a single letter. Any
conversion specification which is unimplemented is ignored.
ISOdatetime
and ISOdate
are convenience wrappers for
strptime
, that differ only in their defaults and that
ISOdate
sets a timezone. (For dates without times it would be
better to use the "Date"
class.)
The format
methods and strftime
return character vectors
representing the time.
strptime
turns character representations into an object of
class "POSIXlt"
. The timezone is used to set the isdst
component.
ISOdatetime
and ISOdate
return an object of class
"POSIXct"
.
The default formats follow the rules of the ISO 8601 international
standard which expresses a day as "2001-02-28"
and a time as
"14:01:02"
using leading zeroes as here. The ISO form uses no
space to separate dates and times.
If the date string does not specify the date completely, the returned
answer may be system-specific. The most common behaviour is to assume
that unspecified seconds, minutes or hours are zero, and a missing
year, month or day is the current one. If it specifies a date
incorrectly, reliable implementations will give an error and the date
is reported as NA
. Unfortunately some common implementations
(such as glibc) are unreliable and guess at the intended meaning.
If the timezone specified is invalid on your system, what happens is system-specific but it will probably be ignored.
OS facilities will probably not print years before 1CE (aka 1AD) correctly.
Remember that in most timezones some times do not occur and some occur twice because of transitions to/from summer time. What happens in those cases is OS-specific.
International Organization for Standardization (2004, 1988, 1997, ...) ISO 8601. Data elements and interchange formats – Information interchange – Representation of dates and times. For links to versions available on-line see (at the time of writing) http://www.qsl.net/g1smd/isopdf.htm; for information on the current official version, see http://www.iso.org/iso/en/prods-services/popstds/datesandtime.html.
DateTimeClasses for details of the date-time classes;
locales
to query or set a locale.
Your system's help pages on strftime
and strptime
to
see how to specify their formats.
Windows users will find no help page for strptime
: code based
on glibc is used (with corrections), so all the conversion
specifications described here are supported, but with no alternative
number representation nor era available in any locale.
## locale-specific version of date() format(Sys.time(), "%a %b %d %X %Y %Z") ## time to sub-second accuracy (if supported by the OS) format(Sys.time(), "%H:%M:%OS3") ## read in date info in format 'ddmmmyyyy' ## This will give NA(s) in some locales; setting the C locale ## as in the commented lines will overcome this on most systems. ## lct <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "C") x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960") z <- strptime(x, "%d%b%Y") ## Sys.setlocale("LC_TIME", lct) z ## read in date/time info in format 'm/d/y h:m:s' dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92") times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26") x <- paste(dates, times) strptime(x, "%m/%d/%y %H:%M:%S") ## time with fractional seconds z <- strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS") z # prints without fractional seconds op <- options(digits.secs=3) z options(op)