strptime                package:base                R Documentation

Date-time Conversion Functions to and from Character

Description:

     Functions to convert between character representations and objects
     of classes '"POSIXlt"' and '"POSIXct"' representing calendar dates
     and times.

Usage:

     ## 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")

Arguments:

       x: An object to be converted.

      tz: A timezone specification to be used for the conversion.
          System-specific (see 'as.POSIXlt'), 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.

Details:

     The 'format' and 'as.character' methods and 'strftime' convert
     objects from the classes '"POSIXlt"' and '"POSIXct"' (not
     'strftime') to character vectors.

     'strptime' converts character strings to class '"POSIXlt"': its
     input 'x' is first coerced to character if necessary.  Each string
     is processed as far as necessary for the format specified: any
     trailing characters are ignored.

     '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' Abbreviated weekday name in the current locale. (Also matches
          full name on input.)

     '%A' Full weekday name in the current locale.  (Also matches
          abbreviated name on input.)

     '%b' Abbreviated month name in the current locale. (Also matches
          full name on input.)

     '%B' Full month name in the current locale.  (Also matches
          abbreviated name on input.)

     '%c' Date and time, locale-specific.

     '%d' Day of the month as decimal number (01-31).

     '%H' Hours as decimal number (00-23).

     '%I' Hours as decimal number (01-12).

     '%j' Day of year as decimal number (001-366).

     '%m' Month as decimal number (01-12).

     '%M' Minute as decimal number (00-59).

     '%p' AM/PM indicator in the locale.  Used in conjuction with '%I'
          and *not* with '%H'.

     '%S' Second as decimal number (00-61), allowing for up to two
          leap-seconds (but POSIX-compliant OSes will ignore leap
          seconds).

     '%U' Week of the year as decimal number (00-53) using the first
          Sunday as day 1 of week 1.

     '%w' Weekday as decimal number (0-6, Sunday is 0).

     '%W' Week of the year as decimal number (00-53) using the first
          Monday as day 1 of week 1.

     '%x' Date, locale-specific.

     '%X' Time, locale-specific.

     '%y' Year without century (00-99). If you use this on input, which
          century you get is system-specific.  So don't!  Often values
          up to 69 (or 68) are prefixed by 20 and 70(or 69) to 99 by
          19.

     '%Y' Year with century.

     '%z' (output only.) Offset from Greenwich, so '-0800' is 8 hours
          west of Greenwich.

     '%Z' (output only.) Time zone as a character string (empty if not
          available).

     Where leading zeros are shown they will be used on output but are
     optional on input.

     Also defined in the current standards but less widely implemented
     (e.g. not for output on Windows) are

     '%C' Century (00-99): the integer part of the year divided by 100.

     '%D' Locale-specific date format such as '%m/%d/%y': ISO C99 says
          it should be that exact format.

     '%e' Day of the month as decimal number (1-31), with a leading
          space for a single-digit number.

     '%F' Equivalent to %Y-%m-%d (the ISO 8601 date format).

     '%g' The last two digits of the week-based year (see '%V'). 
          (Typically accepted but ignored on input.)

     '%G' The week-based year (see '%V') as a decimal number. 
          (Typically accepted but ignored on input.)

     '%h' Equivalent to '%b'.

     '%k' The 24-hour clock time with single digits preceded by a
          blank.

     '%l' The 12-hour clock time with single digits preceded by a
          blank.

     '%n' Newline on output, arbitrary whitespace on input.

     '%r' The 12-hour clock time (using the locale's AM or PM).

     '%R' Equivalent to '%H:%M'.

     '%t' Tab on output, arbitrary whitespace on input.

     '%T' Equivalent to '%H:%M:%S'.

     '%u' Weekday as a decimal number (1-7, Monday is 1).

     '%V' Week of the year as decimal number (00-53). If the week
          (starting on Monday) containing 1 January has four or more
          days in the new year, then it is considered week 1. 
          Otherwise, it is the last week of the previous year, and the
          next week is week 1.  (Typically accepted but ignored on
          input.)

     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.  Note that '%S' ignore
     fractional parts on output.

     The behaviour of other conversion specifications (and even if
     other character sequences commencing with '%' _are_ conversion
     specifications) is system-specific.

     '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.)

Value:

     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
     and to set the '"tzone"' attribute if 'tz != ""'.

     'ISOdatetime' and 'ISOdate' return an object of class '"POSIXct"'.

Note:

     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.

References:

     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)
     <URL: http://www.qsl.net/g1smd/isopdf.htm>; for information on the
     current official version, see <URL:
     http://www.iso.org/iso/en/prods-services/popstds/datesandtime.html>.

See Also:

     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. (On some systems 'strptime' is replaced
     by corrected code from 'glibc', when all the conversion
     specifications described here are supported, but with no
     alternative number representation nor era available in any
     locale.)

Examples:

     ## 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)

     ## timezones are not portable, but 'EST5EDT' comes pretty close.
     (x <- strptime(c("2006-01-08 10:07:52", "2006-08-07 19:33:02"),
                    "%Y-%m-%d %H:%M:%S", tz="EST5EDT"))
     attr(x, "tzone")

