J'écris une fonction qui a besoin d'une entrée timedelta à transmettre sous forme de chaîne. L'utilisateur doit entrer quelque chose comme "32m" ou "2h32m", ou même "4:13" ou "5hr34m56s" ... Y a-t-il une bibliothèque ou quelque chose qui a déjà implémenté ce genre de chose?
96
d
jours,h
heures,m
minutes ets
secondes à l' aide d' une ligne (après l' importationdatetime
):datetime.timedelta(days = d, hours = h, minutes=m, seconds=s)
.Réponses:
Pour le premier format (5hr34m56s), vous devez analyser à l'aide d'expressions régulières
Voici la solution re-basée:
la source
dateutil.parser.parse
n'analysera pas lestimedelta
objets. Il renvoie adatetime
et déclenche une exception pour des chaînes comme'28:32:11.10'
.Pour moi, la solution la plus élégante, sans avoir à recourir à des bibliothèques externes telles que dateutil ou à analyser manuellement l'entrée, est d'utiliser la puissante
strptime
méthode d'analyse de chaînes de datetime .Après cela, vous pouvez utiliser votre objet timedelta comme d'habitude, le convertir en secondes pour vous assurer que nous avons fait la bonne chose, etc.
la source
datetime.strptime("32:20:25","%H:%M:%S")
ne fonctionne pas) et que vous devez connaître le format d'entrée exact.timedelta
paramètre assez ennuyeux, mais le mieux que je puisse trouver pour éviter cela est:, cedelta = t - datetime.combine(t.date(), time.min)
qui est ... horrible.J'ai eu un peu de temps hier, alors j'ai développé la réponse de @virhilo dans un module Python, en ajoutant quelques formats d'expression de temps supplémentaires, y compris tous ceux demandés par @priestc .
Le code source est sur github (licence MIT) pour quiconque le souhaite. C'est aussi sur PyPI:
Renvoie l'heure en nombre de secondes:
la source
Je voulais entrer juste une heure, puis l'ajouter à différentes dates, donc cela a fonctionné pour moi:
la source
dtt.strptime(myduration, "%H:%M:%S") - dtt(1900, 1, 1)
fonctionne aussi ...J'ai modifié la belle réponse de virhilo avec quelques mises à jour:
3m0.25s
3 minutes, 0,25 seconde).
la source
Si vous utilisez Python 3, voici la version mise à jour de la solution de Hari Shankar, que j'ai utilisée:
la source
Django est livré avec la fonction utilitaire
parse_duration()
. De la documentation :la source
Utilisez la bibliothèque isodate pour analyser la chaîne de durée ISO 8601. Par exemple:
Voir également Existe - t-il un moyen simple de convertir une durée ISO 8601 en timedelta?
la source