6
votes

Quelle est la meilleure façon de vérifier si le temps passe dans une minute?

Je veux écrire un script Python simple qui vérifiera s'il s'agit de 2 minutes avant une heure / minute donnée, puis appelle ma fonction chaque jour ou pour une date donnée à l'heure donnée.

Le script sera courir chaque minute dans un cronjob. p>

donc les deux cas pour exécuter mycée (): p>

10:55 tous les jours
10:55 le 9/28/2012 P>

Mais j'ai du mal à déterminer quand il est 2 minutes avant l'heure / minute donnée avec DateTime. Aussi, comment déterminer le quotidien vs juste un jour donné? P>

mydate = datetime(2012, 09,28, 10,55)
check = mydate - datetime.now()    # gives you a timedelta

if check < datetime.timedelta(minutes=2):
     run_myfunction()


2 commentaires

Pourquoi ne laissez-vous pas le script courir tous les jours à 10h55 par le cronjob?


Merci gars, je suis juste allé faire un chèque avec minutes = 0. Je suppose que j'aurais dû y penser plus avant de poster!


4 Réponses :


7
votes
now = datetime.now()
mystart = now.replace(hours=10, minutes=55, seconds=0)
myend = mystart + timedelta(minutes=2)
if mystart <= mydate < myend:
    # do your stuff

0 commentaires

0
votes

Changer votre code comme celui-ci

mydate = datetime(2012, 09,2, 10,55)
current_date = datetime.now()
check = mydate - current_date    # gives you a timedelta

if mydate > current_date and check < datetime.timedelta(minutes=2):
     run_myfunction()


0 commentaires

0
votes

Il peut être pirate, mais vous pouvez utiliser .total_seconds () pour construire une plage: xxx

de cette façon, si alors - maintenant < / code> est un négatif timedelta , total_seconds () retournera un numéro négatif et rendra votre condition faux .


1 commentaires

total_seconds () est disponible depuis Python 2.7



0
votes

Pour la partie quotidienne, vous pouvez utiliser

delta = (now-today)
lapse = delta.days * 86400 + delta.seconds
if abs(lapse) <= 2*60:
    run_function()


0 commentaires