8
votes

Conversion du temps Python H: M: S en secondes

Je suis conscient qu'avec la fonction TimeDelta, vous pouvez convertir des secondes en h: m: s en utilisant quelque chose comme: xxx

mais j'ai besoin de convertir h: m: s en secondes ou minutes.

connaissez-vous une fonction qui peut faire cela?


3 commentaires

Quelle est votre entrée source? Une chaîne d'horodatage? Une sorte d'objet?


Voulez-vous dire quelques secondes ou minutes depuis l'époque? Ou voulez-vous simplement extraire les secondes et les pièces minute de l'horodatage?


Dupliqué possible: Stackoverflow.com/Questtions/10049805/...


7 Réponses :


2
votes

Malheureusement, il n'est pas aussi trivial que la construction d'un objet DateTime à partir d'une chaîne à l'aide d'une chaîne à l'aide de DateTime.stryptime . Cette question a été posée précédemment sur la pile débordement ici: Comment Pour construire un objet TimeDelta d'une chaîne simple , où la solution impliquée à l'aide de Python-DateUtil .

Alternativement, si vous ne voulez pas avoir à ajouter un autre module, voici une classe que vous pouvez utiliser pour analyser un timedelta à partir d'une chaîne: http://kbyanc.blogspot.ca/2007/08/python-reconstructing-timedeltas-from.html < / a>


0 commentaires

13
votes
>>> s = "00:11:06"
>>> sum(int(i) * 60**index for index, i in enumerate(s.split(":")[::-1]))
666

3 commentaires

Notez que cela échoue si le nombre d'heures dépasse 23.


@Brendanwood Plus généralement, il échoue si la chaîne est passée à STRATTIME n'est pas une heure valide.


Merci pour la clarification.



0
votes

Ceci fonctionne en 2.6.4:

thetimedelta = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)


1 commentaires

La réponse de Nolen est beaucoup plus propre - je n'ai pas vu la fonction Strptime.



13
votes
def hms_to_seconds(t):
    h, m, s = [int(i) for i in t.split(':')]
    return 3600*h + 60*m + s

1 commentaires

Nice et simple, bien que je pense que vous voulez retourner datetime.timedelta (secondes = 3600 * H + 60 * m + s) .



0
votes

Je ne suis même pas sûr que je me dérangeais avec TimeDelta pour ce xxx


2 commentaires

J'utiliserais la compréhension de la liste ici au lieu de carte . Je pense que ce serait beaucoup plus clair ...


À droite, préférez toujours la compréhension de la liste à la carte ... Ici, cela n'aurait pas été plus simple car il aurait nécessité une fermeture éclair que la carte peut gérer plusieurs séquences. 6 d'une demi-douzaine ... regarde genre de laids les deux manières



1
votes
>>> def tt(a):
...     b = a.split(':')
...     return int(b[0]) * 3600 + int(b[1]) * 60 + int(b[2])
... 
>>> print tt('0:11:06')
666

0 commentaires

0
votes

Vous n'avez pas besoin d'importer quelque chose!

def time(s):
  m = s // 60
  h = (m // 60) % 60
  m %= 60
  s %= 60
  return h,m,s


0 commentaires