Update: 02/06/2014

Key words: as.POSIXR ManualR Reference Index

as.POSIX*    Date-time Conversion Functions


Functions to manipulate objects of classes "POSIXlt" and "POSIXct" representing calendar datesand times.


as.POSIXct(x, tz = "", ...)
as.POSIXlt(x, tz = "", ...)

## S3 method for class character
as.POSIXlt(x, tz = "", format, ...)

## S3 method for class numeric
as.POSIXlt(x, tz = "", origin, ...)

## S3 method for class POSIXlt
as.double(x, ...)


xAn object to be converted.
tzA timezone specification to be used for the conversion, if one is required. System-specific (see time zones), but "" is the current timezone, and "GMT"is UTC (Universal Time, Coordinated).
...further arguments to be passed to or from other methods.
formatcharacter string giving a date-time format as used by strptime.
origina date-time object, or something which can be coerced byas.POSIXct(tz = "GMT") to such an object.


The as.POSIX* functions convert an object to one of the two classes used to represent date/times(calendar dates plus time to the nearest second). They can convert a wide variety of objects, including objects of the other class and of classes "Date", "date" (from package date), "chron"and "dates" (from package chron) to these classes. Dates without times are treated as being atmidnight UTC.

They can also convert character strings of the formats "2001-02-03" and "2001/02/03" option-ally followed by white space and a time in the format "14:52" or "14:52:03". (Formats such as"01/02/03" are ambiguous but can be converted via a format specification by strptime.) Fractional seconds are allowed. Alternatively, format can be specified for character vectors or factors:if it is not specified and no standard format works for all non-NA inputs an error is thrown.

If format is specified, remember that some of the format specifications are locale-specific, and youmay need to set the LC_TIME category appropriately via Sys.setlocale. This most often affectsthe use of %b, %B (month names) and %p (AM/PM).

Logical NAs can be converted to either of the classes, but no other logical vectors can be.

If you are given a numeric time as the number of seconds since an epoch, see the examples.

Character input is first converted to class "POSIXlt" by strptime: numeric input is first convertedto "POSIXct". Any conversion that needs to go between the two date-time classes requires a time-zone: conversion from "POSIXlt" to "POSIXct" will validate times in the selected timezone. Oneissue is what happens at transitions to and from DST, for example in the UK

as.POSIXct(strptime("2011-03-27 01:30:00", "%Y-%m-%d %H:%M:%S"))
as.POSIXct(strptime("2010-10-31 01:30:00", "%Y-%m-%d %H:%M:%S"))

are respectively invalid (the clocks went forward at 1:00 GMT to 2:00 BST) and ambiguous (theclocks went back at 2:00 BST to 1:00 GMT). What happens in such cases is OS-specific: one shouldexpect the first to be NA, but the second could be interpreted as either BST or GMT (and common

OSes give both possible values). Note too (see strftime), OS facilities may not format invalidtimes correctly.


as.POSIXct and as.POSIXlt return an object of the appropriate class. If tz was specified, as.POSIXlt will give an appropriate "tzone" attribute. Date-times known to be invalid will bereturned as NA.


Some of the concepts used have to be extended backwards in time (the usage is proleptic). Forexample, the origin of time for the "POSIXct" class, `1970-01-01 00:00.00 UTC', is before UTCwas defined. More importantly, conversion is done assuming the Gregorian calendar which wasintroduced in 1582 and not used universally until the 20th century. One of the re-interpretationsassumed by ISO 8601:2004 is that there was a year zero, even though current year numbering (andzero) is a much later concept (525 AD for year numbers from 1 AD).

If you want to extract specific aspects of a time (such as the day of the week) just convert it to class"POSIXlt" and extract the relevant component(s) of the list, or if you want a character representa-tion (such as a named day of the week) use the format method.

If a timezone is needed and that specified is invalid on your system, what happens is system-specific but attempts to set it will probably be ignored.

See Also

DateTimeClasses for details of the classes; strptime for conversion to and from character repre-sentations.

Sys.timezone for details of the (system-specific) naming of time zones.

locales for locale-specific aspects.


(z <- Sys.time()) # the current datetime, as class "POSIXct"
unclass(z) # a large integer
floor(unclass(z)/86400) # the number of days since 1970-01-01 (UTC)
(now <- as.POSIXlt(Sys.time())) # the current datetime, as class "POSIXlt"
unlist(unclass(now)) # a list shown as a named vector
now$year + 1900 # see ?DateTimeClasses
months(now); weekdays(now) # see ?months
## suppose we have a time in seconds since 1960-01-01 00:00:00 GMT
## (the origin used by SAS)
z <- 1472562988
# ways to convert this
as.POSIXct(z, origin = "1960-01-01") # local
as.POSIXct(z, origin = "1960-01-01", tz = "GMT") # in UTC
## SPSS dates (R-help 2006-02-16)
z <- c(10485849600, 10477641600, 10561104000, 10562745600)
as.Date(as.POSIXct(z, origin = "1582-10-14", tz = "GMT"))
as.POSIXlt(Sys.time(), "GMT") # the current time in UTC
## Not run: ## These may not be correct names on your system
as.POSIXlt(Sys.time(), "America/New_York") # in New York
as.POSIXlt(Sys.time(), "EST5EDT") # alternative.
as.POSIXlt(Sys.time(), "EST" ) # somewhere in Eastern Canada
as.POSIXlt(Sys.time(), "HST") # in Hawaii
as.POSIXlt(Sys.time(), "Australia/Darwin")
## End(Not run)

R Tutorial