Date and time with R - Département de Mathématiques

Transcription

Date and time with R - Département de Mathématiques
Université de Caen Basse-Normandie
1
12 septembre 2013
Département de Mathématiques et Mécanique
Le temps
Sommaire
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
1.11
1.1
Dates, heures et zones . . . . . . . . . . . . . .
Les fuseaux horaires ou les zones . . . . . . . .
Régionaliser son unix : locale . . . . . . . . . .
La classe POSIXct . . . . . . . . . . . . . . . . .
La classe POSIXlt . . . . . . . . . . . . . . . . .
Convertion datetime vers chaine de caractères
Choix de la langue . . . . . . . . . . . . . . . . .
Convertion chaines vers datetime . . . . . . . .
Opérations sur les temps . . . . . . . . . . . . .
Les zones . . . . . . . . . . . . . . . . . . . . . .
Heure d’été, heure d’hiver . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
1
2
2
3
3
4
5
6
6
Dates, heures et zones
Les temps sont décrits générallement par trois quantités : la date, l’horaire et fuseau horaire, par exemple
date 11 setembre 2001
horaire 8 h 46mn
zone UTC -4 New York Etas Unis
Le temps absolu ou Coordinated Universal Time, en abrégé UTC est calculé à l’aide de pile atomique avec une très grande
précision. Ce temps est approximativement égal au temps appelé Greenwich Mean Time (GMT).
Dans cet exercice on étudie les classes informatiques de R permettant de gérer ces dates et heures. Le nom générique
informatique décrivant les caractéristiques de ces objets est DateTime. On pourra étudier l’aide de R ?DateTimeClasses.
PHP DateTime Class
Python Basic date and time types
MySQL Les types DATETIME, DATE, et TIMESTAMP
Microsoft Chaı̂nes de format de date et d’heure standard
1.2
Les fuseaux horaires ou les zones
Les temps regionaux sont des affichages de ce temps absolu en fonction du fuseau horaire ou zone de la région. Par
exemple
CET Central European Time=UTC+0100
CEST Central European Summer Time =UTC+0200
EDT Eastern Daylight Time (summer)=UTC-0400 New-York
EDT Eastern Daylight Time (winter)=UTC-0500
NZDT New Zealand Daylight Time summer =UTC +1300
NZST New Zealand Standard Time winter =UTC +1200
Une liste des abréviations des zones peut être trouvée à http://www.timeanddate.com/library/abbreviations/timezones/
1.3
Régionaliser son unix : locale
Les propriétés locales de votre OS sont accessibles avec les fonctions suivantes. On peut en particulier savoir si on utilise
le codage latin1 (windows) ou utf8 (linux) dans R.
> Sys.getlocale()
[1] "LC_CTYPE=fr_FR.UTF-8;LC_NUMERIC=C;LC_TIME=fr_FR.utf8;LC_COLLATE=fr_FR.UTF-8;LC_MONETARY=fr_FR.UTF-8;LC_M
> l10n_info()
# info locale ans R
http://www.math.unicaen.fr/~kauffman/cours
1
[email protected]
Université de Caen Basse-Normandie
12 septembre 2013
Département de Mathématiques et Mécanique
$MBCS
[1] TRUE
$`UTF-8`
[1] TRUE
$`Latin-1`
[1] FALSE
Depuis un terminal, on peut interroger le systeme avec l’aide de la commande locale ou locale -a
francois@kauffmannpt:~> locale
LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=
1.4
La classe POSIXct
La classe POSIXct décrit le temps comme le nombre de secondes écoulé depuis l’ origine choisie arbitrairement le premier
janvier 1970 0h :00:00 UTC. Un attribut de type zone peut associé à cette classe.
> h=Sys.time()
> str(h)
POSIXct[1:1], format: "2013-09-12 18:42:24"
> unclass(h)
[1] 1379004144
1.5
La classe POSIXlt
La classe POSIXlt décrit les temps comme une liste dont les champs sont les secondes, minutes, heures, jour, mois ,année
(depuis 1900)....
> h=as.POSIXlt(Sys.time())
> str(h)
POSIXlt[1:1], format: "2013-09-12 18:42:24"
> str(unclass(h))
List of
$ sec
$ min
$ hour
$ mday
9
:
:
:
:
num
int
int
int
24.1
42
18
12
http://www.math.unicaen.fr/~kauffman/cours
2
[email protected]
Université de Caen Basse-Normandie
$
$
$
$
$
-
12 septembre 2013
Département de Mathématiques et Mécanique
mon : int 8
year : int 113
wday : int 4
yday : int 254
isdst: int 1
attr(*, "tzone")= chr [1:3] "" "CET" "CEST"
> h$year;h$sec
[1] 113
[1] 24.11129
1.6
Convertion datetime vers chaine de caractères
La fonction générique est la fonction format, les formats peuvent être trouvé à l’aide de la fonction strptime.
> format(Sys.time(),"%d%B%y")
[1] "12septembre13"
1.7
Choix de la langue
On peut spécifier la langue utilisée pour afficher les dates.
> Sys.setlocale("LC_TIME", "fr_FR.utf8");format(Sys.time(),"%d%B%y") # francais
[1] "fr_FR.utf8"
[1] "12septembre13"
> Sys.setlocale("LC_TIME", "de_DE.utf8") ;format(Sys.time(),"%d%B%y") # allemand
[1] "de_DE.utf8"
[1] "12September13"
> Sys.setlocale("LC_TIME", "en_US.utf8");format(Sys.time(),"%d%B%y") # anglais
[1] "en_US.utf8"
[1] "12September13"
> h=Sys.time()
> str(h)
POSIXct[1:1], format: "2013-09-12 18:42:24"
> str(unclass(h))
num 1.38e+09
http://www.math.unicaen.fr/~kauffman/cours
3
[email protected]
Université de Caen Basse-Normandie
12 septembre 2013
Département de Mathématiques et Mécanique
> str(unclass(as.POSIXct(h)))
num 1.38e+09
> str(unclass(as.POSIXlt(h)))
List of 9
$ sec : num 24.1
$ min : int 42
$ hour : int 18
$ mday : int 12
$ mon : int 8
$ year : int 113
$ wday : int 4
$ yday : int 254
$ isdst: int 1
- attr(*, "tzone")= chr [1:3] "" "CET" "CEST"
1.8
Convertion chaines vers datetime
La fonction strptime permet de convertir des dates en caractères au format POSIXct et POSIXlt
> # date en français
>
> Sys.setlocale("LC_TIME", "fr_FR.utf8");
[1] "fr_FR.utf8"
> chaine="09sept.11"
> h=strptime("09sept.11","%d%b%y")
> format(h, "%a %b %d %X %Y %Z")
[1] "ven. sept. 09 00:00:00 2011 CEST"
> h$yday;h$mon
[1] 251
[1] 8
>
>
>
>
>
>
>
# convertions vecteurs char vers POSIXlt
dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92","09/13/11")
times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26", "08:30:00")
x <- paste(dates, times)
datetimes=strptime(x, "%m/%d/%y %H:%M:%S")
format(datetimes,"%m/%d/%y %H:%M:%S %Z")
[1] "02/27/92 23:03:20 CET"
[4] "02/28/92 18:21:03 CET"
"02/27/92 22:29:56 CET"
"02/01/92 16:56:26 CET"
"01/14/92 01:03:30 CET"
"09/13/11 08:30:00 CEST"
>
http://www.math.unicaen.fr/~kauffman/cours
4
[email protected]
Université de Caen Basse-Normandie
1.9
12 septembre 2013
Département de Mathématiques et Mécanique
Opérations sur les temps
> h+3600
# ajout
d'une heure
[1] "2011-09-09 01:00:00 CEST"
> h-3600
# retrait d'une heure
[1] "2011-09-08 23:00:00 CEST"
> as.numeric(h)
# nb secondes depuis 1 janvier 1970
[1] 1315519200
> unclass(h)
$sec
[1] 0
$min
[1] 0
$hour
[1] 0
$mday
[1] 9
$mon
[1] 8
$year
[1] 111
$wday
[1] 5
$yday
[1] 251
$isdst
[1] 1
> h0=Sys.time()
> h1=Sys.time()
> h1-h0
Time difference of 0.0002810955 secs
> h0-h1
Time difference of -0.0002810955 secs
http://www.math.unicaen.fr/~kauffman/cours
5
[email protected]
Université de Caen Basse-Normandie
1.10
>
>
>
>
>
12 septembre 2013
Département de Mathématiques et Mécanique
Les zones
h=Sys.time()
h.paris
=as.POSIXlt(h, tz="CEST")
h.new_york
=as.POSIXlt(h, tz="America/New_York")
h.los_angeles=as.POSIXlt(h, tz="America/Los_Angeles")
h.paris- h.new_york # pourquoi ?
# heure à Paris
# heure à New-York
# heure à Los-Angeles
Time difference of 0 secs
> c(as.numeric(as.POSIXct(h.paris)),
+
as.numeric(as.POSIXct(h.new_york)),
+
as.numeric(as.POSIXct(h.los_angeles)))
[1] 1379004144 1379004144 1379004144
1.11
Heure d’été, heure d’hiver
Trouvez la date et l’heure du passage de l’horaire d’été à l’horaire d’hiver. Calculez ces deux, faites la différence.
> h.ete
=strptime("30/10/2011 02:59:59", "%d/%m/%Y %H:%M")
> h.hiver =strptime("30/10/2011 02:01:00", "%d/%m/%Y %H:%M")
> format(h.hiver,"%a, %d %b %Y %H:%M:%S %Z")
[1] "dim., 30 oct. 2011 02:01:00 CET"
> format(h.ete,"%a, %d %b %Y %H:%M:%S %Z")
[1] "dim., 30 oct. 2011 02:59:00 CET"
> h.hiver-h.ete # bug
Time difference of -58 mins
> h.ete
=strptime("27/03/2011 03:00:01", "%d/%m/%Y %H:%M")
> h.hiver =strptime("27/03/2011 01:59:59", "%d/%m/%Y %H:%M")
> format(h.hiver,"%a, %d %b %Y %H:%M:%S %Z")
[1] "dim., 27 mars 2011 01:59:00 CET"
> format(h.ete,"%a, %d %b %Y %H:%M:%S %Z")
[1] "dim., 27 mars 2011 03:00:00 CEST"
> h.hiver-h.ete # 1min
Time difference of -1 mins
http://www.math.unicaen.fr/~kauffman/cours
6
[email protected]