R Language
Date et l'heure
Recherche…
Introduction
R comprend des classes pour les dates, les dates et les différences de temps; voir ?Dates
?difftime
?DateTimeClasses
?difftime
et suivre la section "Voir aussi" de ces documents pour plus de documentation. Documents connexes: dates et classes date-heure .
Remarques
Des classes
Une classe date-heure, POSIXct stocke le temps en secondes depuis l’époque UNIX le
1970-01-01 00:00:00 UTC
. C'est le format renvoyé lors de l'extraction de l'heure actuelle avecSys.Time()
.Une classe date-heure, stocke une liste de jour, mois, année, heure, minute, seconde, etc. C'est le format retourné par
strptime
.Date Seule classe de date, stocke la date sous la forme d'un nombre à virgule flottante.
Sélection d'un format date-heure
POSIXct est la seule option dans le monde caché et le monde d’UNIX. Il est plus rapide et prend moins de mémoire 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
Forfaits spécialisés
- à tout moment
- Data.table IDate et ITime
- temps rapide
- lubrifier
- nanotime
Date et heure actuelles
R est en mesure d'accéder à la date, l'heure et le fuseau horaire actuels:
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"
Utilisez OlsonNames()
pour afficher les noms de fuseaux horaires dans la base de données Olson / IANA sur le système actuel:
str(OlsonNames())
## chr [1:589] "Africa/Abidjan" "Africa/Accra" "Africa/Addis_Ababa" "Africa/Algiers" "Africa/Asmara" "Africa/Asmera" "Africa/Bamako" ...
Aller à la fin du mois
Disons que nous voulons aller au dernier jour du mois, cette fonction aidera sur:
eom <- function(x, p=as.POSIXlt(x)) as.Date(modifyList(p, list(mon=p$mon + 1, mday=0)))
Tester:
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
>
Utiliser une date dans un format de chaîne:
> eom('2000-01-01')
[1] "2000-01-31"
Aller au premier jour du mois
Disons que nous voulons aller au premier jour d'un mois donné:
date <- as.Date("2017-01-20")
> as.POSIXlt(cut(date, "month"))
[1] "2017-01-01 EST"
Déplacer une date un nombre de mois cohérent par mois
Disons que nous voulons passer à une date donnée un num
mois. Nous pouvons définir la fonction suivante, qui utilise le package mondate
:
moveNumOfMonths <- function(date, num) {
as.Date(mondate(date) + num)
}
Il déplace de manière cohérente la partie mois de la date et ajuste le jour au cas où la date fait référence au dernier jour du mois.
Par exemple:
Retour un mois:
> moveNumOfMonths("2017-10-30",-1)
[1] "2017-09-30"
Retour deux mois:
> moveNumOfMonths("2017-10-30",-2)
[1] "2017-08-30"
Avant deux mois:
> moveNumOfMonths("2017-02-28", 2)
[1] "2017-04-30"
Il bouge deux mois à partir du dernier jour de février, donc le dernier jour d'avril.
Voyons comment cela fonctionne pour les opérations en amont et en aval lorsque c'est le dernier jour du mois:
> moveNumOfMonths("2016-11-30", 2)
[1] "2017-01-31"
> moveNumOfMonths("2017-01-31", -2)
[1] "2016-11-30"
Parce que novembre a 30 jours, nous obtenons la même date dans l’opération inverse, mais:
> moveNumOfMonths("2017-01-30", -2)
[1] "2016-11-30"
> moveNumOfMonths("2016-11-30", 2)
[1] "2017-01-31"
Parce que le mois de janvier est de 31 jours, le déménagement aura lieu deux mois après le dernier jour de novembre.