• Aucun résultat trouvé

Dates sous Windows Ewen Gallic Novembre 2014

N/A
N/A
Protected

Academic year: 2022

Partager "Dates sous Windows Ewen Gallic Novembre 2014"

Copied!
3
0
0

Texte intégral

(1)

Dates sous Windows

Ewen Gallic Novembre 2014

Lorsque l’on a parlé des dates en R, nous avons rencontré deux problèmes sur un exemple, qui tentait de convertir une chaîne de caractères en objet de modeDate :

• le format de date français dans l’exemple donné n’est pas reconnu sous Windows ;

• le format de date anglais non plus.

Ces deux problèmes ont deux origines distinctes. Pour l’exemple en français, il s’agit d’un problème de respect de normes, tandis que le second est juste une histoire de paramètres locaux.

L’exemple de la date en français

Créons un objet contenant une chaîne de caractères avec une date en français.

d_char_fr <- "Mer 04 Fév 2015"

as.Date(d_char_fr, format = c("%a %d %b %Y"))

## [1] NA

Il s’avère que les conventions d’abréviations ne sont pas respectées ici. En effet, les jours de la semaine, doivent être abrégés comme suit (ce qui est bien respecté sous Windows, mais pas sous Mac OS) :

(d <- seq(as.Date("2014-01-01"), as.Date("2014-12-01"), by = "month")) [1] "2014-01-01" "2014-02-01" "2014-03-01" "2014-04-01"

[5] "2014-05-01" "2014-06-01" "2014-07-01" "2014-08-01"

[9] "2014-09-01" "2014-10-01" "2014-11-01" "2014-12-01"

format(d, "%b")

[1] "janv." "févr." "mars" "avr." "mai" "juin" "juil."

[8] "août" "sept." "oct." "nov." "déc."

Alors, comment faire, si on reçoit un document qui contient des dates dans ce format non conventionnel ? Il n’y a pas de solution (à ma connaissance) élégante. Je vous propose néanmoins un moyen de contourner le problème, en créant une fonction qui va remplacer les occurrences des jours abrégés par leur bonne abréviations. Avant de lire plus bas, je vous conseille d’essayer vous même de créer cette fonction, puis de regarder la solution.

Voici la solution que je vous soumets :

# Weekdays

jours_ab <- c("Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim")

jours_ab_correcte <- c("lun.", "mar.", "mer.", "jeu.", "ven", "sam.", "dim.")

# Months

mois_ab <- c("jan", "fév", "mar", "avr", "mai", "jui", "jul",

"aou", "sep", "oct", "nov", "déc")

mois_ab_correcte <- c("janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.",

"août", "sept.", "oct.", "nov.", "déc.") 1

(2)

library(stringr)

# Replaces the incorrect abbreviation by a correct one

# @string: input character string

# @abbreviation: string vector of abbreviations to replace

# @correct_abb: string vector of corresponding correct abbreviations replace_abb <- function(string, abbreviation, correct_abb){

ind <- str_detect(string, ignore.case(abbreviation)) if(any(ind)){

ind <- which(ind)

str_replace(string, ignore.case(abbreviation[ind]), correct_abb[ind]) }else{

string } }

Ce qui, appliqué à notre objetd_char_fr, donne :

d_char_fr <- replace_abb(d_char_fr, jours_ab, jours_ab_correcte) d_char_fr <- replace_abb(d_char_fr, mois_ab, mois_ab_correcte) d_char_fr

## [1] "mer. 04 févr. 2015"

On peut alors, sous Windows, le convertir à l’aide de la fonctionas.Date(): as.Date(d_char_fr, format = c("%a %d %b %Y"))

## [1] "2015-02-04"

Convertir une date anglaise

Lorsque le nom des jours de la semaine ou des mois est écrit en anglais, il suffit de changer les paramètres locaux.

d_char <- "Wed 04 Feb 2015"

as.Date(d_char, format = c("%a %d %b %Y"))

## [1] NA

Cela retourne un objet non-disponible (NA), parce queRn’a pas réussi à interpréter correctement la date. Il est alors nécessaire de changer les paramètres locaux de temps. Vous pouvez afficher les paramètres locaux de votre machine à l’aide de l’instruction suivante (vous obtiendrez un résultat différent du mien si vous êtes sous Windows) :

Sys.getlocale()

## [1] "fr_FR.UTF-8/fr_FR.UTF-8/fr_FR.UTF-8/C/fr_FR.UTF-8/fr_FR.UTF-8"

Sous Windows, pour changer les paramètres de temps au format américain, il faut évaluer l’instruction suivante :

2

(3)

Sys.setlocale("LC_TIME", "English_United States")

Sous Mac OS, cela donne :

Sys.setlocale("LC_TIME", "en_US")

À présent, l’instruction pour convertir l’objetd_charenDate fonctionne : as.Date(d_char, format = c("%a %d %b %Y"))

## [1] "2015-02-04"

En revanche, on ne peut plus transformerd_char_fr: as.Date(d_char_fr, format = c("%a %d %b %Y"))

## [1] NA

Il faut alors changer les paramètres locaux à nouveau, soit en précisant qu’on veut du français :

# Windows

Sys.setlocale('LC_TIME', "French_France")

# Mac OS

Sys.setlocale('LC_TIME', "fr_FR")

Ou bien restaurer les paramètres par défaut : Sys.setlocale('LC_TIME', "")

invisible(Sys.setlocale('LC_TIME', ""))

as.Date(d_char_fr, format = c("%a %d %b %Y"))

## [1] "2015-02-04"

Enfin, on peut noter qu’avec le packagelubridate, l’opération est moins pénible : library(lubridate)

# Windows

dmy("mer. 04 févr. 2015", locale = "french_france") dmy("Wed 04 Feb 2015", locale = "english_us")

# Mac OS

dmy("Mer 04 Fév. 2015", locale = "fr_FR") dmy("Wed 04 Feb 2015", locale = "en_US")

3

Références

Documents relatifs

Allez dans Gestion des Stratégies de Groupe,faites un clic droit sur l'UO que vous venez de créer et cliquez sur Lier un objet de stratégie de groupe existant, puis dans la

Un utilisateur, même limité, peut voir, modifier ou supprimer des données, y compris d’un administrateur. Pour avoir un système sécurisé il faut utiliser le gestionnaire de

Sous Windows, il y a principalement trois options pour écrire des programmes multitâches : Utiliser la Win32 Application Programming Interface (API) en conjonction avec la C run-time

Pour faire glisser un élément et le déplacer, appuyez deux fois 

Concaténer les deux éléments du vecteur phrases en une seule chaîne de caractères, en les séparant par le caractère de retour à la ligne, puis utiliser la fonction cat() pour

Voilà, j'espère que ce document vous aura permis de mettre en pratique le décryptage de la clé wep voir de la clef WPA-PSK de votre réseau sans fil. Comme vous l'aurez

• Etre capable de gérer dans un réseau local utilisant le protocole TCP-IP un ou plusieurs serveur Windows 2000 Windows 2003 Microsoft et de clients XP,

CX16PRO Logiciel IPBX 3CX V15 PRO 16 CX32PRO Logiciel IPBX 3CX V15 PRO 32 CX64PRO Logiciel IPBX 3CX V15 PRO 64 CX128PRO Logiciel IPBX 3CX V15 PRO 128 CX256PRO Logiciel IPBX 3CX V15