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 :

convertion d'une date format serie


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Par défaut convertion d'une date format serie
    Bonjour,

    mon premier pb bloquant,

    j'extrait d'une base (en fichier binaire) des enregistrement la date et sour la forme d'un float je croix(8 octets).
    la donnée est la suivante : 39767.397916666669
    je sait de source sur que cette valeur représente une date dont sa "valeur" est : 15/11/08 9:33 dont j'en suis aussi sur merci excel (arrondi à 39767.39792).

    Comment en python convertir ce nombre en date ?

  2. #2
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Par défaut
    Comme quoi en cherchant mieux,

    D' abord sur 39767.397916666669, 39767 correspond à la date 15/11/2008, retrouvé avec la fonction datetime.

    Ensuite le reste 0.397916666669 correspond à une heure ou 0 = 0 et 23h59h59 = 0,999999999999.

    cela doit correspondre à 10h33 heure TU donc 9:33 local je pense.

    Je posterai mon bout de code bientôt dés que j'aurai trouvé la fonction pour les HMS.

    A+

  3. #3
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Par défaut
    je coince sur des convertions de type de données

    Voila, dans l'extrait de mon code ci-joint,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    import datetime
    import math
     
    f = open('G:\Projet_dev\test.bin' , 'rb')
    date = f.read(8)
    my_date = unpack('d', date) #Float
    ma_date = math.trunc(my_date)
    d0 = datetime.date(1900, 1, 1)
    delta = datetime.timedelta(days=(ma_date -2.))
    d1 = d0 + delta
    print "Date = ", d1
    j'ai l'erreur suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ma_date = math.trunc(my_date)
    AttributeError: __trunc__
    j'ai trouvé nul part un explication sur cet attribut __trunc__

    A ce momment, ma_date=39767.397916666669 et j'utilise math.trunc pour recupérer un int égal 39767 car la fonction datetime ne prend pas les float.


    voila le pb avant de chercher pour le calcul des heures et minutes avec le reste du float (0.397916666669).

    Cordialement

  4. #4
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut
    Tu utilises unpack du module struct ?

    Cette méthode retourne toujours un tuple :
    struct.unpack(fmt, string)
    Unpack the string (presumably packed by pack(fmt, ...)) according to the given format. The result is a tuple even if it contains exactly one item.
    Et la méthode trunc du module math ne fonctionne qu'avec des réels en paramètre :
    math.trunc(x)
    Return the Real value x truncated to an Integral
    Tu lui passes un tuple, c'est donc normal que la méthode lève une exception. Les tuples ne possèdent pas de méthode __trunc__.


    Sinon pour revenir au premier post, ça me paraît assez étrange que tu obtiennes une date sous forme de réel étant donné que les dates sont des données discrètes.
    Les dates sont souvent codées par un entier signé (32 ou 64bits) selon la norme POSIX [1][2].

    [1] http://en.wikipedia.org/wiki/Unix_ti...ing_the_number
    [2] http://en.wikipedia.org/wiki/Time_t

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print 'int(39767.397916666669) =',int(x)
    Résultat
    int(39767.397916666669) = 39767
    EDIT: j'ai effacé des solutions trouvées en allant chercher midi à 14h37

  6. #6
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Le plus dur à été de trouvé en quel format étais exprimé ta date

    D'après ce que j'ai trouvé, c'est un format microsoft OLE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #-*- coding: utf-8 -*- 
     
    import datetime
     
    OLE_BASE_TIME = datetime.datetime(1899, 12, 30, 0, 0, 0)
     
    def ole2datetime(dt):
        return OLE_BASE_TIME + datetime.timedelta(days=float(dt))
     
     
     
    d = 39767.397916666669
     
    print ole2datetime(d)
    A vérifier avec d'autres dates avant de valider la solution.

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

Discussions similaires

  1. [MySQL] récupérer une date formatée avec MySql
    Par stolx_10 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/06/2007, 10h57
  2. Réponses: 5
    Dernier message: 20/02/2007, 17h52
  3. [MySQL] Faire un INSERT d'une date format Francais dans un champ date '0000-00-00' ?
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/11/2006, 13h49
  4. [VBA-E]convertion d'une date
    Par watcha69 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/02/2006, 13h09
  5. [date et heure] convertion d'une date en chaîne
    Par jean-jacques varvenne dans le forum SQL
    Réponses: 5
    Dernier message: 23/03/2005, 11h31

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