2009-09-09 5 views
3

Je suis à la recherche d'une bibliothèque pour effectuer des opérations sur des périodes de temps avec support des jours de la semaine et de l'heure de la journée. J'ai commencé à lancer le mien, mais cela semble être un travail sujet aux erreurs, donc je voudrais une solution testée pour cela. Cela ne me dérange pas de dépenser de l'argent.Bibliothèque de date et heure avec prise en charge des périodes pour C#/VB.NET?

Si j'ai un ensemble de deux périodes (cela peut être plusieurs)

Configuration:

// [period 1]: 
TimeSet.Add(1 January 2008-31 January 2008 every Tuesday 14:00-15:00) 
// [period 2] 
TimeSet.AddWithOr(1 January 2008-15 January 2008 every Tuesday 13:00-14:00) 

Résultats:

TimeSet.ContainsTime(2 January 2008 13:45) = False 
TimeSet.ContainsTime(2 January 2008 14:15) = True // [period 1] 
TimeSet.ContainsTime(2 January 2008 13:15) = True // [period 2] 

Je dois aussi la gamme des fonctions de contrôle:

// Only Tuesday 13-15 is in range: 
TimeSet.ContainsTime(24 December 2007 13:45,1 January 2008 13:00) = False 
TimeSet.ContainsTime(24 December 2007 13:45,2 January 2008 12:59) = False 
TimeSet.ContainsTime(24 December 2007 13:45,2 January 2008 13:00) = True 

Autre m fonctions avancées set minerai est un plus.

J'ai essayé de googler pour cela, mais je n'ai rien trouvé.

+0

Peut-être que certains contrôles sheduling/civils 3ème partie ont une telle fonctionnalité ... – Lucero

Répondre

0

Vous pouvez utiliser la structure polyvalente DateTime. Il a opérateurs pour comparer deux DateTime, par ex. Moins que. Ainsi les opérations d'ensemble et les fonctions de vérification de distance sont assez triviales à implémenter dans une classe simple pour ce but .

La structure de données centrale d'une telle classe peut être une liste de plages DateTime triées par heure de début. Si une nouvelle plage DateTime est ajoutée, elle est fusionnée avec une plage DateTime existante s'il y a chevauchement. Si elle est fusionnée avec l'un des , il est nécessaire de parcourir la nouvelle liste pour voir si une plage de date/heure se chevauche (et qu'une fusion est requise). Ceci est répété jusqu'à ce qu'il n'y ait plus de chevauchement.

+0

J'ai créé mon propre (en utilisant DateTime). Si je divise chaque définition de période en plusieurs "DateRanges" je me retrouve avec beaucoup de gammes - 365-366 gammes pour 1 Jan-31 Dec 14: 00-15: 00. – Erwin

+0

OK, je vois. Ce n'est pas une représentation efficace alors, mais cela devrait fonctionner. Serait-ce un problème d'arrondi à virgule flottante? Par exemple. 14.00 peut ne pas être le même que 13.00 + 1 heure. - –

-2

Jetez un oeil à la TimeSpan Structure

+1

Comment la structure TimeSpan m'aiderait-elle? – Erwin

1

Je ne sais pas qui existent en tant que C# /. NET Framework mais vous pouvez être en mesure d'adapter le Quartz project's (un programmateur C#) espace de calendrier. Cela inclut un objet CronCalendar. Je n'ai pas utilisé cron depuis un moment, mais je peux me rappeler qu'il supporte le type de système d'occurrence que vous recherchez.

Il y a quite a few helper extensions que vous pouvez utiliser sur codeproject, comme une méthode AddBusinessDay qui peut aussi aider. En termes d'analyse de ce que vous avez pour le format - vous pouvez changer cela en une interface fluide pour rendre le développement/test plus rapide et éviter d'avoir à écrire une classe compliquée d'analyse de jetons. Vous pouvez simplement le garder en format Cron pour rendre le code Quartz encore plus facile à intégrer, à moins qu'il ne soit utilisé par des non-techniciens.

+0

Les classes Quartz semblent prometteuses, car l'analyse des dates est stockée dans une base de données. – Erwin

Questions connexes