IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

appliquer l'heure d'été sur une date "naïve"


Sujet :

Python

  1. #1
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 646
    Par défaut appliquer l'heure d'été sur une date "naïve"
    Bonjour,

    je récupère régulièrement une date* sur un site qui n'applique pas l'heure d'été**.
    en hiver tout va bien, mais en été la date affichée a une heure de retard.

    je n'arrive pas à dire aux moteurs de recherche ce que je cherche (ou il ne comprend rien )

    donc, j'ai une "date" à laquelle je voudrais appliquer l'heure d'été (ajouter une heure en été, et pas en hiver) sans avoir à réinventer la roue, parce que je me doute qu'elle existe, et ce que je fais tourne carré (quand ça tourne ).
    et je ne sais pas comment faire.



    --
    * je récupère du texte que je transforme en date avec datetime().
    ** je ne sais pas pourquoi, il considère que c'est à l'utilisateur de configurer le DST dans ses paramètres de compte, et je n'ai pas de compte !
    les données horaires sont donc affichées sans DST.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Dans le module pytz, la fonction localize a un paramètre is_dst, est-ce que ça pourrait être un point de départ ?
    Mais pour ça il serait bien de savoir aussi le fuseau horaire du site en question et d'appliquer le même timezone pour créer un datetime "time zone-aware".

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par N_BaH Voir le message
    sans avoir à réinventer la roue, parce que je me doute qu'elle existe
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import pytz
    from datetime import datetime
     
    paris_tz = pytz.timezone('Europe/Paris')
     
    hiver = datetime(2023, 2, 23, 17)
    print(hiver.astimezone(paris_tz))
     
    ete = datetime(2023, 6, 23, 17)
    print(ete.astimezone(paris_tz))
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 646
    Par défaut
    c'est là le problème, en ce moment (heure d'été), je reçois 2023 4 26 18 14, parce que le site n'applique pas l'heure d'été.
    je voudrais obtenir 2023 4 26 19 14
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    je voudrais obtenir 2023 4 26 19 14
    Tu n'as pas testé mon code précédent. Ou alors tu n'as pas regardé son résultat. Pour l'heure d'hiver ça indique "+01:00" (soit 1h de décalage sur l'heure solaire) et pour l'heure d'été ça indique "+02:00". Donc l'info sur le décalage à apporter existe, ne reste qu'à la récupérer et à l'appliquer

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import pytz
    from datetime import datetime
     
    paris_tz = pytz.timezone('Europe/Paris')
     
    date_from_site = datetime(2023, 6, 26, 18, 14)
    my_date=date_from_site.astimezone(paris_tz)
    dst=my_date.tzinfo.dst(my_date)
    print(dst)
    print(my_date + dst)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 646
    Par défaut
    super !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_date.tzinfo.dst(my_date)
    je n'aurais pas trouvé.

    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    je n'aurais pas trouvé.
    La doc Python m'a beaucoup aidé. Le seul avantage que j'ai sur toi c'est un peu plus d'expérience ce qui m'a permis de savoir rapidement où chercher
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 646
    Par défaut
    je n'en suis pas à jouer avec les classes, c'est encore un peu abstrait, alors
    une classe de base abstraite

    pas facile d'imaginer comment utiliser l'abstraction d'une abstraction, même de base.
    ou que ça peut s'appliquer au besoin du moment.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    jpas facile d'imaginer comment utiliser l'abstraction d'une abstraction, même de base.
    Je pense que tu t'es laissé effrayer par les mots. Dans le cas présent, que la classe soit abstraite n'avait aucune importance, l'important était juste de trouver l'info "dans quel décalage je suis". Ensuite la syntaxe à appliquer je l'ai faite par tatônnements (je ne suis d'ailleurs pas satisfait de devoir utiliser deux fois "my_date" dans dst=my_date.tzinfo.dst(my_date) mais j'ai tenté plein d'autres syntaxes sans résultat).

    Après effectivement venant du shell, les classes ça doit sembler redoutablement compliqué mais en réalité il n'en est rien.
    Si tu as fait du C, tu dois connaitre les structures (pouvoir agréger plusieurs informations dans un même token comme par exemple jj, mm et aa sous le vocable "date" qui devient utilisable et manipulable => un seul élément à tenir au lieu de trois). Déjà en shell les tableaux associatifs peuvent se voir un peu comme des structures.
    Ben si tu connais les structures, passer à l'objet c'est juste pouvoir y rajouter des actions par le biais de fonctions, fonctions qu'on appelle "méthodes" et qui s'appliqueront automatiquement sur l'objet qui les appelle. C'est tout.
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class cercle:
    	def __init__(self, r):
    		self.r=r
    	def perimetre(self):
    		return 2*3.14*self.r
     
    class carre:
    	def __init__(self, c):
    		self.c=c
    	def perimetre(self):
    		return self.c*4
     
    ce=cercle(12)
    print(ce.perimetre())
    ca=carre(5)
    print(ca.perimetre())
    Le premier avantage directement visible c'est que le nom "perimetre" étant interne à chaque objet, il n'y a aucun conflit de nom (tu ne t'embêtes plus à chercher des noms uniques comme tu le ferais en shell ou en C si tu devais écrire un code analogue en créant une fonction "perimetre_cercle" et une autre "perimetre_carre").
    Et le second c'est qu'il n'y a pas de risque de se tromper et appeler par exemple perimetre_carre() sur un cercle.
    Le reste ce n'est que de la syntaxe à connaitre.

    Citation Envoyé par N_BaH Voir le message
    ou que ça peut s'appliquer au besoin du moment.
    Dans l'absolu une classe abstraite n'est jamais nécessaire. On peut s'en passer. C'est juste un outil permettant 1) d'éviter de créer quelque chose d'inutile et 2) t'obliger de ton côté à écrire ce qui est nécessaire (une barrière de protection antibug en quelque sorte).
    Une classe abstraite c'est une classe que tu ne peux pas instancier (tu ne peux pas créer de variable de cette classe comme je l'ai fait dans mon exemple où j'ai créé "ce" et "ca"). Tu ne peux qu'en hériter.
    Ca sert à créer un squelette qui t'indiquera, dans ta vaie classe, ce que tu ne dois pas oublier d'écrire.
    Prenons par exemple un nombre. Un nombre en tant que tel ça n'a pas de sens car pas de distinction. Mais ça a des propriétés (on peut l'additionner, le soustraire, etc).
    Donc on pourrait dire "'je crée une classe abstraite nombre qui aura les méthodes addition() et soustraction()". Ces propriétés sont pour l'instant juste déclarées car ne connaissant pas le détail de mes nombres, je ne sais pas non plus comment les additionner. Mais je sais que cela devra être écrit.
    Ensuite, je crée une classe par exemple "nombre entier" qui, elle a du sens. Et la faisant hériter de "nombre" elle bénéficie automatiquement de "addition()" et "soustraction()". Et comme ces "addition()" et "soustraction()" dont elle hérite n'ont pas été codées mais seulement déclarées, je suis obligé dans "nombre entier" de les écrire et écrire leur traitement =>ça m''évite les oublis
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 646
    Par défaut
    en continuant mes recherches, j'ai trouvé ceci (en reprenant ton code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> paris_tz = pytz.timezone('Europe/Paris')
    >>> date_from_site = datetime(2023, 6, 26, 18, 14)
    >>> my_date=date_from_site.astimezone(paris_tz)
    >>> my_date.dst()
    datetime.timedelta(seconds=3600)
    qui, additionné à date_from_site, et en jouant sur la date du mois, modifie (ou pas) l'heure en fonction de l'heure d'été.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    >>> my_date.dst()
    Ben tu vois !!! Tu as trouvé tout seul comment simplifier ce dst=my_date.tzinfo.dst(my_date) qui est effectivement directement récupérable dans le my_date
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 646
    Par défaut
    c'est ça "tout seul".
    je ne le dirai quand même pas trop fort, ça Sve@r_ait.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête sur une date en spécifiant l'heure
    Par mcfly37 dans le forum SQL
    Réponses: 3
    Dernier message: 26/03/2013, 16h47
  2. [WD14] Calcul sur une Date Heure
    Par TELKA dans le forum WinDev
    Réponses: 3
    Dernier message: 12/04/2010, 11h47
  3. [CR 2008] Extraction sur une date/heure
    Par campia dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 16/06/2009, 16h10
  4. Réponses: 1
    Dernier message: 29/10/2007, 12h43
  5. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo