2017-04-01 1 views
0

J'écris un code python qui gère un fichier texte et, pour chaque ligne d'entrée, calcule le temps impliqué par l'action décrite dans cette ligne, puis signale un "temps de fonctionnement". Sortie requise commepython: calcul de l'avancement du temps

 lapse  time 
start   12:00 
action1 0:37 12:37 
action2 1:01 13:38 
action3 0:30 14:08 

Je suis arrivé à quelques approches possibles, mais tous semblaient maladroits. Surtout, je suis confus à propos de l'utilisation de "temps" ou "strftime" ou "datetime" ou peut-être même quelque chose d'autre. Je suis sûr qu'une solution simple et élégante doit exister.

NB les fuseaux horaires et l'heure d'été ne sont pas un problème, si je peux arriver à montrer UTC qui est suffisant, au moins pour un début. À un stade ultérieur, la dernière colonne (UTC) pourrait être complétée par une colonne «heure locale» mais secondaire.

Edité par manque apparent de clarté, d'ajouter par exemple pseudo-code:

TIME='12:00' 
PCS_PER_HOUR=750 
with infile: 
    read line of data 
    process data, including calc of PCS_DONE 
    LAPSE=PCS_DONE/PCS_PER_HOUR 
    TIME += LAPSE 
    print(' ..... ' ,format(data, data, data, LAPSE, TIME)) 

Ma question est de savoir comment faire le "TIME = '12: 00" en quelque chose que python peut facilement gérer et incrémenter avec un nombre entier calculé de secondes ou de minutes ou autre.

+0

Veuillez partager vos "quelques approches possibles". – DyZ

+0

Ils étaient sur le modèle de garder des variables séparées pour le nombre d'heures, le nombre de minutes, puis en ajoutant "la manière artisanale" comme "si minutes> 60: heures + = 1, minutes - = 60". Essentiellement, il n'utilise aucune fonction spécifique au temps, alors que Python en a une grande richesse, au point de causer de la confusion. –

+0

Conserve l'heure en secondes, telle que retournée par 'time.time()'. Imprimez-le comme vous le souhaitez en utilisant 'strftime()'. – DyZ

Répondre

1

Utilisez datetime.timedelta.

Définissez l'heure de début.

In [1]: import datetime 

La durée initiale est de 12 heures.

In [2]: start = datetime.timedelta(hours=12) 

In [3]: start 
Out[3]: datetime.timedelta(0, 43200) 

Disons que LAPSE est de 0,23 heures (pièces divisé par pièces par heure heures de rendements).

In [4]: action1 = datetime.timedelta(hours=0.23) 

Vous pouvez maintenant formater les heures comme vous le souhaitez. La représentation standard est les heures, minutes et secondes:

In [5]: str(start) 
Out[5]: '12:00:00' 

In [6]: str(start+action1) 
Out[6]: '12:13:48' 
+0

Merci, mais pas vraiment une réponse. Je calcule le laps de temps comme LAPSE = PCS_DONE/PCS_PER_HOUR ou ainsi. Comment puis-je obtenir un tel résultat dans la strftime, qui semble attendre un tuple comme son entrée? En d'autres termes, "l'heure actuelle" n'est pas du tout impliquée. –

+0

Ensuite, utilisez uniquement les deltas. –

+0

Merci encore, mais vous semblez manquer mon problème. J'ai édité la question d'ouverture, en ajoutant un peu de pseudo code. –