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

Bibliothèques tierces Python Discussion :

datetime et dates au format ISO8601 [Python 2.X]


Sujet :

Bibliothèques tierces Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    amateur informatique
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : amateur informatique

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Par défaut datetime et dates au format ISO8601
    Bonjour,

    Après plusieurs recherches infructueuses, je me tourne vers la communauté pour une question qui va vous sembler bateau...

    Je souhaite obtenir la date du jour au format ISO8601, c'est à dire du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2020-01-04T11:00:00+00:00
    J'utilise datetime (je souhaite par la suite faire des calculs sur cette date, trouver la veille, etc) et me rapproche du résultat avec la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import datetime as dt
    import pytz
     
    aujourdhui = pytz.utc.localize(dt.datetime.utcnow()).isoformat()
    Le problème est que le résultat renvoyé est de la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2020-01-04T09:56:21.697592+00:00
    Je n'arrive pas à me débarrasser de ce nombre à 6 digits après les secondes et avant l'offset UTC: savez-vous à quoi il correspond? Comment le faire disparaître?

    pour info, datetime.today() me renvoie le même type de format.

    Par avance merci!

  2. #2
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Je ne connais pas par coeur pyzt ni même datetime en python2, mais vous pouvez utiliser strftime sur un objet datetime pour donner le format exacte que vous voulez.

    Passez à python3

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonjour,

    il s'agit des microsecondes, vous pouvez le tronquer en texte ou sous-traire les microsecondes à la date et isoformat ne contiendra plus de sous-secondes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import datetime
    import pytz
     
     
    utc_now = pytz.utc.localize(datetime.datetime.utcnow())
    utc_now -= datetime.timedelta(microseconds=utc_now.microsecond) # Supprime les sous-secondes
    print(utc_now.isoformat())
    Vous obtiendrez : 2020-01-04T14:06:51+00:00

    Note : il serait plus précis d'arrondir les secondes pour ne pas perdre la précision, si > 0,5 s on rajoute 1s par exemple

    Ca donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import datetime
    import pytz
     
     
    utc_now_full = pytz.utc.localize(datetime.datetime.utcnow())
    utc_now = utc_now_full - datetime.timedelta(microseconds=utc_now_full.microsecond) # Supprime les sous-secondes
    utc_now += datetime.timedelta(seconds=round(utc_now_full.microsecond * 1e-6)) # Rajoute l'arrondi des sous-secondes
    print(utc_now.isoformat())
    print(utc_now_full.isoformat())
    2020-01-04T14:14:53+00:00
    2020-01-04T14:14:52.909613+00:00

  4. #4
    Candidat au Club
    Homme Profil pro
    amateur informatique
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : amateur informatique

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Par défaut
    Bonjour,

    merci pour ces réponses! Cela fonctionne parfaitement. Afin de forger ma requête json, je dois utiliser un mix de vos 2 réponses, ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    utc_now = pytz.utc.localize(dt.datetime.utcnow())
    utc_now -= dt.timedelta(microseconds=utc_now.microsecond) # Supprime les sous-secondes
    utc_yesterday = utc_now - dt.timedelta(hours=24)
     
     
    str_aujourdhui = time.strftime("%Y-%m-%dT%H:%M:%S+00:00")
     
     
    str_hier = utc_yesterday.strftime("%Y-%m-%dT%H:%M:%S+00:00")
    Merci!

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

Discussions similaires

  1. Un format de Date compliqué ! DATETIME, TIMESTAMP, DATE ?
    Par Amarox dans le forum Développement
    Réponses: 7
    Dernier message: 28/11/2011, 14h54
  2. Réponses: 7
    Dernier message: 27/05/2011, 10h00
  3. [MySQL] comment rechercher une date au format datetime avec une date au format date
    Par Menoly dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/06/2007, 10h14
  4. [Oracle] Retour de date complète (format DATETIME)
    Par AntaresJon dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/04/2006, 17h57
  5. Convertir une date au format excel en datetime SQL server
    Par ALLB dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 20/07/2004, 11h28

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