Decalage d'heure entre TZ

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Decalage d'heure entre TZ

Messagepar Serge Rapenne » 03 Juin 2019, 13:02

Bonjour à tous,

Je cherche à savoir si une (date,heure) donnée indiqué en UTC au format POSIXct est dans le créneau heure d'hiver ou heure d'été dans la TZ Europe/Paris

Je fais ça comme ça :

Code : Tout sélectionner

ladate=as.POSIXct(c("2019-06-02 12:14","2019-02-06 12:00"))
ecart<-as.integer(difftime(ladate,as.POSIXct(as.character(ladate),tz="Europe/Paris")))

qui va retourner 1 en hiver et 2 en été, ça fonctionne très bien mais je trouve ça un peu "tordu".

J'ai trouvé la fonction GMTOffsetFromTz du package oce mais c'est un gros package dédié à l’océanographie que je ne vais pas installer juste pour cette fonction.

Si quelqu'un a une autre solution, je suis preneur !

Merci d'avance

Serge

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Decalage d'heure entre TZ

Messagepar Mickael Canouil » 03 Juin 2019, 14:40

Bonjour Serge,

personnellement je récupérerai juste la fonction: https://github.com/dankelley/oce/blob/d ... sc.R#L2702

Sinon, sans l'édition "à la main":
## Data are from
## https://www.timeanddate.com/library/abb ... timezones/
## and hand-edited, so there may be errors. Also, note that some of these
## contradict ... I've commented out conflicting definitions that I think
## will come up most rarely in use, but perhaps something better should
## be devised. (Maybe this is not a problem. Maybe only MEDS uses these,
## as opposed to GMT offsets, and maybe they only work in 5 zones, anyway...)

Code : Tout sélectionner

# library(tidyr)
# library(dplyr)
# library(xml2)
# library(rvest)
GMTOffsetFromTz <- function(tz) {
  `%>%` <- dplyr::`%>%`
  timezone_data <- xml2::read_html("https://www.timeanddate.com/time/zones/") %>%
    rvest::html_table() %>%
    .[[1]] %>%
    tidyr::separate_rows(X4, sep = " / ") %>%
    dplyr::mutate(
      X2 = gsub(" +", " ", gsub("\t", " ", gsub("\n", "", X2))),
      X4 = X4 %>%
        gsub("UTC", "", .) %>%
        gsub(":30", ".50", ., fixed = TRUE) %>%
        gsub(":00", "", ., fixed = TRUE) %>%
        gsub(":45", ".75", ., fixed = TRUE) %>%
        as.numeric()
    ) %>%
    dplyr::filter(X1==tz)
 
  stopifnot(nrow(timezone_data)!=0)
  if (nrow(timezone_data)>1) {
    timezone_data
  } else {
    timezone_data %>%
      dplyr::select(X4) %>%
      unlist(use.names = FALSE)
  }
}

Code : Tout sélectionner

GMTOffsetFromTz("CEST")
#> [1] 2
GMTOffsetFromTz("CET")
#> [1] 1


Cordialement,

PS: je ne suis pas sûr que ce soit moins "tordu"...
Mickaël
mickael.canouil.fr | rlille.fr

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Decalage d'heure entre TZ

Messagepar Logez Maxime » 03 Juin 2019, 15:04

Bonjour,

tu peux aussi utiliser la fonction format avec l'argument '%z' qui te renvoi l'offset en heure par rapport à l'heure UTC :

Code : Tout sélectionner

format(ladate, "%z")
[1] "+0200" "+0100"
Tu as son pendant avec "%Z" qui te donne le time zone et donc tu peux aussi retrouver le delta.
Cordialement,
Maxime

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Decalage d'heure entre TZ

Messagepar Mickael Canouil » 03 Juin 2019, 15:15

Logez Maxime a écrit :Bonjour,

tu peux aussi utiliser la fonction format avec l'argument '%z' qui te renvoi l'offset en heure par rapport à l'heure UTC :

Code : Tout sélectionner

format(ladate, "%z")
[1] "+0200" "+0100"
Tu as son pendant avec "%Z" qui te donne le time zone et donc tu peux aussi retrouver le delta.
Cordialement,
Maxime


Je note l'utilisation de format pour extraire l'information, c'est bien mieux et plus simple comme solution ^^ (je ne manipule pas souvent des dates)
Mickaël
mickael.canouil.fr | rlille.fr

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Decalage d'heure entre TZ

Messagepar Serge Rapenne » 03 Juin 2019, 15:24

Merci à vous deux,

Je me doutais bien qu'il y avait une solution simple, j'avais bien regardé l'aide de strptime mais en diagonale et j'avais raté le %z.

Serge


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité