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 :

transformer une valeur numérique en date


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Novembre 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 67
    Par défaut transformer une valeur numérique en date
    Bonjour, j'ai une valeur extraite d'un calcul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                if 'created_timestamp' in l:
                    created_timestamp = l[19:-21]
                    DateCreat = int (float((created_timestamp))/86400) + 36526.0416666667
    soit : 46679.4848032407 = 19.10.2017 11:38:07
    je souhaite récupérer la valeur en format datetime pour l'insérer dans Sql.

    merci d'avance,
    Guy MULLER

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 742
    Par défaut
    Salut,

    Citation Envoyé par Muller Guy Voir le message
    soit : 46679.4848032407 = 19.10.2017 11:38:07
    je souhaite récupérer la valeur en format datetime pour l'insérer dans Sql.
    Normalement, le pilote SQL sait transformer un datetime Python en datetime SQL.
    La bibliothèque datetime vous donne les différentes possibilité côté Python. La documentation de votre pilote SQL doit mentionner comment présenter cela dans une insertion.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  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,

    La référence de votre time stamp (horodatage) ne semble correspondre à aucune référence Epoch connue.

    Si je reprends votre nombre d'origine (created_timestamp) :
    created_timestamp = (46679.4848032407 - 36526.0416666667) * 86400

    soit :

    created_timestamp = 877257486.9999938

    Ça donne à peu près 27 ans d'écoulé depuis 1990

    Pas de chance l'Epoch utilisé par Python utile la référence Unix (1er janvier 1970 à 0 heure (UTC))

    Il vous faut donc convertir en rajoutant la différence de 20 ans :

    Voici une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import datetime
     
    created_timestamp = 877257486.9999938
    new_epoch = datetime.datetime(1990, 1, 1, 0, 0, 0)
    os_epoch = datetime.datetime.utcfromtimestamp(0) # datetime.datetime(1970, 1, 1, 0, 0)
    epoch_delta = (new_epoch - os_epoch) # days=7305
    # epoch_delta.total_seconds() == 631152000.0 secondes écoulées depuis l'epoch système (Unix)
     
    # fromtimestamp si la référence était en heure locale et dont la zone est identique à la machine exécutant le code
    dt = datetime.datetime.utcfromtimestamp(epoch_delta.total_seconds() + created_timestamp)
    # dt == datetime.datetime(2017, 10, 19, 10, 38, 6, 999993)
    print(dt.strftime("%Y/%m/%d %H:%M:%S")) # 2017/10/19 10:38:06
    On obtient ainsi : 2017/10/19 10:38:06 en UTC, en assumant que la date flottante était en UTC.

  4. #4
    Membre actif
    Inscrit en
    Novembre 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 67
    Par défaut
    merci YCL-1 trop cool !

    sans vouloir abuser, j'ai uen autre type de date (cela provient de la base de données 4D !)

    Je n'ai pas le même résultat !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                if 'Beginning' in l:
                    Beginning = 62073570
     
                    new_epoch = datetime.datetime(1990, 1, 1, 0, 0, 0)
                    os_epoch = datetime.datetime.utcfromtimestamp(0) 
                    epoch_delta = (new_epoch - os_epoch) 
     
                    dt = datetime.datetime.utcfromtimestamp(epoch_delta.total_seconds() + float(Beginning))
                    print("Date RDV "  + dt.strftime("%Y/%m/%d %H:%M:%S"))
    Pouvez-voous m'aider, merci d'avance,

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

Discussions similaires

  1. [MySQL-5.1] Transformer une valeur de format date en format texte
    Par jj4822 dans le forum MySQL
    Réponses: 2
    Dernier message: 02/11/2016, 16h50
  2. D'une valeur numérique à une Date
    Par Jessica12 dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/10/2012, 13h13
  3. Comment transformer une valeur numérique en chaine dans une requête ?
    Par jmlabatut dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/11/2009, 05h44
  4. Remplacement d'une valeur numérique
    Par Jean-Louis Corbiau dans le forum Access
    Réponses: 9
    Dernier message: 29/09/2005, 15h25
  5. retait d'une valeur numérique au mieu d'un texte
    Par RémiDavid dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/04/2004, 16h20

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