2017-04-06 2 views
0

Je fais un calcul qui retourne le nombre total de secondes. Puis je transformer en jours, heures, minutes, secondes à l'aide time.strftime python()Comment commencer un jour à 000 en utilisant time.strftime() dans python 2.7?

total_time = time.strftime("%-j days, %-H hours, %-M minutes, %-S seconds,", time.gmtime(total_seconds)) 

Mais, en utilisant% -j commence sur 001, donc mon calcul est toujours hors de 1 jour. Y a-t-il un moyen de démarrer% -j sur 000? Y a-t-il une meilleure manière de faire cela? Merci!

Répondre

4

Cela semble être une façon extrêmement compliquée d'obtenir des jours, des heures, des minutes et des secondes à partir d'une valeur totale en secondes. Vous pouvez simplement utiliser la division:

def secs_to_days(seconds): 
    minutes, seconds = divmod(seconds, 60) 
    hours, minutes = divmod(minutes, 60) 
    days, hours = divmod(hours, 24) 
    return (days, hours, minutes, seconds) 

total_time = ("{:03} days, {:02} hours, {:02} minutes, " 
       "{:02} seconds,").format(*secs_to_days(total_seconds)) 

Pour gérer la pluralisation de ces (001 jours au lieu de 001 jours), vous pouvez modifier la fonction d'aide pour le faire.

def secs_to_days(seconds): 
    minutes, seconds = divmod(seconds, 60) 
    hours, minutes = divmod(minutes, 60) 
    days, hours = divmod(hours, 24) 

    seconds = "{:02} second{}".format(seconds, "" if seconds == 1 else "s") 
    minutes = "{:02} minute{}".format(minutes, "" if minutes == 1 else "s") 
    hours = "{:02} hour{}".format(hours, "" if hours == 1 else "s") 
    days = "{:03} day{}".format(days, "" if days == 1 else "s") 

    return (days, hours, minutes, seconds) 

total_time = ", ".join(secs_to_days(seconds)) 

Si vous gérez pluriels souvent, voir Plural String Formatting pour le cas geneal.

+1

Qu'en est-il des secondes intercalaires? – Marichyasana

+0

Comment formeriez-vous les {: 03} jours pour dire juste 'jour' s'il n'y en a qu'un? –

+0

@Marichyasana Ce sont les secondes SI. – Artyer