431 votes

Python format temporelles en chaîne

Je suis un débutant en Python (2 semaines) et je rencontre des problèmes de mise en forme d'un datetime.timedelta objet.

Voici ce que j'essaie de faire: J'ai une liste d'objets, et l'un des membres de la classe de l'objet est une timedelta objet qui montre la durée d'un événement. Je voudrais afficher que la durée dans le format heures:minutes.

J'ai essayé une variété de méthodes pour ce faire, et j'ai de la difficulté. Ma démarche actuelle est d'ajouter des méthodes à la classe pour mes objets qui renvoient les heures et les minutes. Je peux obtenir les heures en divisant le timedelta.secondes par 3600 et arrondi. J'ai de la difficulté à obtenir le reste des secondes et de la conversion que pour quelques minutes.

En passant, je suis en utilisant Google AppEngine avec Django Templates pour la présentation.

Si quelqu'un peut aider ou connaît une meilleure façon de résoudre ce problème, je serais très heureux.

Merci,

298voto

Parand Points 16356

Vous pouvez seulement convertir la différence de temps à une chaîne avec str(). Voici un exemple :

261voto

John Fouhy Points 14700

Comme vous le savez, vous pouvez obtenir les secondes d’un objet de différence de temps en accédant à la `` attribut.

Vous pouvez convertir que heures et reste en utilisant une combinaison de modulo et soustraction :

Cependant, python fournit la divmod() de fonction intégrée qui permet de simplifier ce code :

J’espère que cela aide !

82voto

joeforker Points 14483
<pre><code></code><p><code></code><code></code><code></code>. Étant donné que vous ne voulez pas les secondes, nous pouvons découper la chaîne par le signe deux-points (3 pièces) et remettre en place avec seulement les 2 premières parties.</p></pre>

64voto

Adam Jacob Muller Points 145
def td_format(td_object):
        seconds = int(td_object.total_seconds())
        periods = [
                ('year',        60*60*24*365),
                ('month',       60*60*24*30),
                ('day',         60*60*24),
                ('hour',        60*60),
                ('minute',      60),
                ('second',      1)
                ]

        strings=[]
        for period_name,period_seconds in periods:
                if seconds > period_seconds:
                        period_value , seconds = divmod(seconds,period_seconds)
                        if period_value == 1:
                                strings.append("%s %s" % (period_value, period_name))
                        else:
                                strings.append("%s %ss" % (period_value, period_name))

        return ", ".join(strings)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X