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

  • POSIXct

    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 avec Sys.Time() .

  • POSIXlt

    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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow