2013-08-02 4 views
0

Nous codez un système qui analyse les événements basés sur le temps, et nous aimerions mettre en place un système de suppression de ces événements où l'on peut donner la syntaxe comme pour Cron correspondant à contre.Heure/Date système de suppression basé

par exemple. Supprimer si ...

  1. .. l'événement se produit le dernier vendredi du mois
  2. .. l'événement se produit entre la semaine de 4 h et 5pm
  3. .. l'événement se produit un dimanche

et ainsi de suite. Nous utilisons Python alors j'espérais qu'il y aurait un module pour faire ce genre de chose, mais mes compétences de recherche me laissent tomber (beaucoup de résultats sur la planification des événements, alors que je veux le contraire - fait le courant le temps correspond à un horaire défini).

Sinon je suis heureux d'écrire un à partir de zéro si quelqu'un a des suggestions pour la meilleure façon de stocker et de comparer un temps sur un calendrier.

Edit:

Pour clarifier les choses, les horaires de suppression ne sont pas gravées dans la pierre, donc je ne peux pas coder simplement une fonction pour traiter les cas spécifiques. Les horaires doivent être stockés dans une base de données, et liée à un événement, donc je peux faire à peu près:

sql_rows = ..... "SELECT * FROM suppressions WHERE event_id = ?" 

for row in sql_rows: 
    if matchesSchedule(current_time,row): 
     print "This should be suppressed" 

donc je dois représenter le programme dans un format que je peux stocker dans une table, puis correspondre colonnes contre les composants de temps actuels.

+0

J'espère que cela peut aider http://docs.python.org/2/library/sched.html –

+0

@NikhilRupanawar Malheureusement non. Comme je l'ai mentionné, je ne planifie pas les événements, mais plutôt des tests pour voir si le temps correspond à un horaire donné. – AndyC

+0

Si je vous comprends bien, vous voulez juste comparer une heure donnée à un ensemble de modèles de temps et vérifier si elle correspond à un ou plusieurs d'entre eux. L'approche directe serait de convertir votre temps en un objet 'datetime', puis vérifiez cet objet pour vos contraintes comme, par exemple,' d.weekday() dans (4, 5, 6) et d.hour == 10'. Pourquoi n'est-ce pas possible? – Alfe

Répondre

0

Je propose d'implémenter simplement vous-même vos vérificateurs de modèle temporel. C'est assez simple en utilisant sth comme l'objet datetime (vous pouvez également utiliser time si vous préférez). Et en syntaxe Python, vous pouvez même exprimer des choses comme "la somme du nombre de minutes, d'heures et de secondes doit être de 42", i. e. choses qui ne sont pas possibles en utilisant des motifs semblables à des cron.

import datetime 

def matchesTimePattern1(d): 
    return (
    d.weekday() == 4 and # Friday? 
    d.month != (d + datetime.timedelta(7)).month # next week is different month? 
) 

def matchesTimePattern2(d): 
    return (
    d.weekday() in (0, 1, 2, 3, 4) and # weekday? 
    d.hour == 16 # at 4pm (up to 4:59:59pm) 
) 

def matchesTimePattern3(d): 
    return (
    d.weekday() == 6 # Sunday? 
) 

d = datetime.datetime.now() 
print matchesTimePattern1(d) 
print matchesTimePattern2(d) 
print matchesTimePattern3(d) 
+0

Merci, c'est plus ou moins ce que j'avais en tête - mon problème, et désolé j'aurais dû être plus clair, c'est que j'ai besoin d'une fonction pour tester le match contre une liste définie d'horaires, par exemple. horaires stockés dans une base de données. Je vais modifier ma question originale pour réfléchir. – AndyC

+1

Vous avez donc besoin d'un langage pour exprimer vos règles d'ordonnancement (par exemple sth similaire au langage cron tab), d'un analyseur pour ce langage (ie une bibliothèque Python, le traduisant en expressions Python comme dans ma réponse), et une installation qui teste les temps donnés par rapport à ces règles calculées. Cela ressemble plus à une tâche de programmation et pas seulement à une question de SO, je le crains ;-) – Alfe

+0

Au début, je ne pensais pas que ce serait si complexe, mais comme vous le faites tous ensemble, il semble tout à fait un défi.Là encore, je pensais que ce genre de chose serait assez commun (je vois beaucoup de logiciels dans ma ligne de travail qui vous permettent de définir des horaires pour ignorer/supprimer des événements) alors j'espérais qu'il y avait une bibliothèque pour comparer le temps dans n'importe quelle langue, puisque je pourrais le porter sur Python). Je suppose que ce n'est pas trop commun! – AndyC

Questions connexes