web-dev-qa-db-fra.com

Soustrayez les secondes de datetime dans python

J'ai une variable int qui est en fait des secondes (permet d'appeler ce nombre de secondes X). J'ai besoin d'obtenir comme résultat la date et l'heure actuelles (au format datetime) moins X secondes.

Exemple

Si X est 65 et la date actuelle est 2014-06-03 15:45:00, alors je dois obtenir le résultat 2014-06-03 15:43:45.

Environnement

Je fais cela sur Python 3.3.3 et je sais que je pourrais probablement utiliser le module datetime mais je n'ai pas eu de succès jusqu'à présent.

24
rodrigocf

En effet, l'utilisation du module datetime:

import datetime

X = 65
result = datetime.datetime.now() - datetime.timedelta(seconds=X)

Vous devriez lire la documentation de ce paquet pour apprendre à l'utiliser!

41
julienc
>>> from datetime import datetime, timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2014, 6, 3, 22, 55, 9, 680637)
>>> now - timedelta(seconds=15)
datetime.datetime(2014, 6, 3, 22, 54, 54, 680637)

C'est une solution de bibliothèque de base, généralement pour cette tâche, je préfère utiliser une classe tierce avec dateutil.relativedelta , il a plus de paramètres et une plus grande flexibilité.

2
wim

Pour développer la réponse de @ julienc, (au cas où cela serait utile à quelqu'un)

Si vous autorisez X à accepter le positif ou le négatif et changez l'instruction de soustraction en une instruction d'addition, vous pouvez avoir une fonction d'ajustement du temps plus intuitive (vous n'avez donc pas besoin d'ajouter des négatifs aux négatifs pour obtenir des positifs) comme ceci:

def adjustTimeBySeconds(time, delta):
    return time + datetime.timedelta(seconds=delta)

time = datetime.datetime.now()
X = -65
print(adjustTimeBySeconds(time, X))
X = 65
print(adjustTimeBySeconds(time, X))
1
AlienFromCA