Buscar..


Introducción

R viene con clases para fechas, fechas y diferencias de hora; Consulte ?Dates , ?DateTimeClasses y ?difftime y siga la sección "Ver también" de esos documentos para obtener más documentación. Documentos relacionados: Fechas y clases de fecha y hora .

Observaciones

Las clases

  • POSIXct

    Una clase de fecha y hora, POSIXct almacena el tiempo como segundos desde la época de UNIX el 1970-01-01 00:00:00 UTC . Es el formato devuelto al extraer la hora actual con Sys.Time() .

  • POSIXlt

    Una clase de fecha y hora, almacena una lista de día, mes, año, hora, minuto, segundo, etc. Este es el formato devuelto por strptime .

  • Fecha La única clase de fecha, almacena la fecha como un número de punto flotante.

Seleccionando un formato de fecha y hora

POSIXct es la única opción en el tidyverse y en el mundo de UNIX. Es más rápido y ocupa menos memoria que POSIXlt.

origin = as.POSIXct("1970-01-01 00:00:00", format ="%Y-%m-%d %H:%M:%S", tz = "UTC")

origin
## [1] "1970-01-01 UTC"

origin + 47
## [1] "1970-01-01 00:00:47 UTC"

as.numeric(origin)     # At epoch
## 0

as.numeric(Sys.time()) # Right now (output as of July 21, 2016 at 11:47:37 EDT)
## 1469116057

posixlt = as.POSIXlt(Sys.time(), format ="%Y-%m-%d %H:%M:%S", tz = "America/Chicago")

# Conversion to POISXct
posixct = as.POSIXct(posixlt)
posixct

# Accessing components
posixlt$sec   # Seconds 0-61
posixlt$min   # Minutes 0-59
posixlt$hour  # Hour 0-23
posixlt$mday  # Day of the Month 1-31
posixlt$mon   # Months after the first of the year 0-11
posixlt$year  # Years since 1900.

ct = as.POSIXct("2015-05-25")
lt = as.POSIXlt("2015-05-25")

object.size(ct)
# 520 bytes
object.size(lt)
# 1816 bytes

Paquetes especializados

  • en cualquier momento
  • data.table IDate y ITime
  • tiempo rápido
  • lubricar
  • nanotime

Fecha y hora actual

R puede acceder a la fecha, hora y zona horaria actuales:

Sys.Date()             # Returns date as a Date object

## [1] "2016-07-21"

Sys.time()             # Returns date & time at current locale as a POSIXct object

## [1] "2016-07-21 10:04:39 CDT"

as.numeric(Sys.time()) # Seconds from UNIX Epoch (1970-01-01 00:00:00 UTC)

## [1] 1469113479

Sys.timezone()         # Time zone at current location

## [1] "Australia/Melbourne"

Use OlsonNames() para ver los nombres de las zonas horarias en la base de datos de Olson / IANA en el sistema actual:

str(OlsonNames())
## chr [1:589] "Africa/Abidjan" "Africa/Accra" "Africa/Addis_Ababa" "Africa/Algiers" "Africa/Asmara" "Africa/Asmera" "Africa/Bamako" ...

Ir al final del mes

Digamos que queremos ir al último día del mes, esta función lo ayudará:

eom <- function(x, p=as.POSIXlt(x)) as.Date(modifyList(p, list(mon=p$mon + 1, mday=0)))

Prueba:

x <- seq(as.POSIXct("2000-12-10"),as.POSIXct("2001-05-10"),by="months")
> data.frame(before=x,after=eom(x))
      before      after
1 2000-12-10 2000-12-31
2 2001-01-10 2001-01-31
3 2001-02-10 2001-02-28
4 2001-03-10 2001-03-31
5 2001-04-10 2001-04-30
6 2001-05-10 2001-05-31
> 

Usando una fecha en un formato de cadena:

> eom('2000-01-01')
[1] "2000-01-31"

Ir al primer día del mes

Digamos que queremos ir al primer día de un mes dado:

date <- as.Date("2017-01-20")

> as.POSIXlt(cut(date, "month"))
[1] "2017-01-01 EST"

Mueve una fecha un número de meses consistentemente por meses

Digamos que queremos mover una fecha determinada un num de meses. Podemos definir la siguiente función, que utiliza el paquete mondate :

moveNumOfMonths <- function(date, num) {
    as.Date(mondate(date) + num)
}

Mueve constantemente la parte del mes de la fecha y el ajuste del día, en caso de que la fecha se refiera al último día del mes.

Por ejemplo:

Volver un mes:

> moveNumOfMonths("2017-10-30",-1)
[1] "2017-09-30"

Volver dos meses:

> moveNumOfMonths("2017-10-30",-2)
[1] "2017-08-30"

Adelante dos meses:

> moveNumOfMonths("2017-02-28", 2)
[1] "2017-04-30"

Se mueve dos meses desde el último día de febrero, por lo tanto, el último día de abril.

Veamos cómo funciona para las operaciones hacia atrás y hacia adelante cuando es el último día del mes:

> moveNumOfMonths("2016-11-30", 2)
[1] "2017-01-31"
> moveNumOfMonths("2017-01-31", -2)
[1] "2016-11-30"

Debido a que noviembre tiene 30 días, obtenemos la misma fecha en la operación hacia atrás, pero:

> moveNumOfMonths("2017-01-30", -2)
[1] "2016-11-30"
> moveNumOfMonths("2016-11-30", 2)
[1] "2017-01-31"

Debido a que enero tiene 31 días, luego de pasar dos meses desde el último día de noviembre recibirá el último día de enero.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow