Python - Travail si le temps est maintenant entre deux temps

J'essaie de trouver le plus propre/la plupart des pythonic façon d'évaluer si le "maintenant" est entre deux temps; Toutefois, les dates de Début et Fin peuvent, ou non, de l'automne à travers une journée de frontière par exemple (juste à l'aide de simples exemples):

onhour=23
onmin=30
offhour=4
offmin=15
timenow = datetime.datetime.now().time()

Faire un tout droit if START < NOW < END scénario de ne pas travailler pour ce!

Ce que j'ai actuellement est un bout de code qui détermine s'il est actuellement "la Nuit", qui ressemble à ceci:

def check_time(timenow, onhour, onmin, offhour, offmin, verbose):
    now = datetime.datetime.now()
    now_time = now.time()
    # If we're actually scheduling at night:
    if int(offhour) < int(onhour):
        # Check to see if we're in daylight times (ie. off schedule)
        if datetime.time(int(offhour),int(offmin)) <= now_time <= datetime.time(int(onhour),int(onmin)):
            if verbose == True:
                print("Day Time detected.")
            return False
        else:
            if verbose == True:
                print("Night Time detected.")
            return True
    else:
        if datetime.time(int(onhour),int(onmin)) <= now_time <= datetime.time(int(offhour),int(offmin)):
            if verbose == True:
                print("Night Time detected.")
            return True
        else:
            if verbose == True:
                print("Day Time detected.")
            return False

Excuses si le titre ne ressemble pas à quelque chose de nouveau, mais après avoir examiné quelques questions /réponses pour les problèmes similaires, tels que:

J'ai remarqué que ces dernières ne semblent pas en compte les cas où le Début et la Fin se produire au cours d'une journée de limite.

En plus de cela; toutes les idées entourant l'ajout de Journée, en fonction de la planification serait très utile aussi! c'est à dire. "pour Lun - Ven, tourner à 23:00, hors d'un 04:00" - mais de la gestion et de partir pour une journée de chaque côté (l'autre; quelque chose qui va être activée, le vendredi, mais pas être désactivé sur le samedi-- et pourtant, y compris le samedi veut dire qu'il se retourna de nouveau à 23!...)

J'ai envisagé de faire un simple "Tour à X, le sommeil pour Y" pour contourner ce problème... mais si le script est lancé lors d'un "Sur les" du cycle, il ne sera pas lancé jusqu'à la prochaine course... Mais il semble que l'option la plus simple! 🙂

Je l'espère, il y a une sorte de génial module qui fait tout cela... 😀

Compatibilité de Python2.7 - 3.2 est assez important pour moi aussi!

  • Comment savez-vous le jour de votre ontime et offtime se réfère à? Par exemple, si le "maintenant" est le 11 Déc, comment pouvez-vous déterminer dans votre exemple, si l'intervalle est de 10 Déc-23:30-11 Déc-4:15 OU à partir de 11 Déc-23:30-12 Déc-4:15?
  • Le problème semble être que vous avez seulement les heures et les minutes, vous n'avez pas de dates. Si vous avez trois dates, puis date1 <= date2 <= date3 fonctionne très bien.
  • Avez-vous regardé dans le Avancé-Python Planificateur?
  • La première écriture des cas de tests pour toutes les variations que vous voulez...
  • Je suis d'accord, certain de place pour l'amélioration, mais je ne pouvais pas envelopper ma tête autour de la façon d'évaluer si dire, offhour doit être attribué à aujourd'hui ou demain... je suppose évaluer si time.now() est plus grand que offhour, ou similaire, serait susceptible d'être suffisant...
  • J'ai eu un coup d'oeil rapide à Avancé Python Planificateur, et il semble bon pour le démarrage des travaux, mais je n'ai pas vu beaucoup dans la façon de définir un "Stop" en fonction de la date/de l'heure (juste une "durée" équivalent)? Peut-être que j'ai raté l'exemple de la doc si?

InformationsquelleAutor dalgibbard | 2013-12-11