2010-10-29 9 views
3

J'écris un service, mais je veux avoir des paramètres de configuration pour s'assurer que le service ne fonctionne pas dans une certaine fenêtre de temps un jour de la semaine. Par exemple, les lundis entre 17h00 et 19h00.Question DateTime régulière

Est-il possible de créer un datetime qui représente n'importe quel lundi afin que je puisse avoir une clé de configuration App pour DontProcessStartTime et une pour DontProcessEndTime avec des valeurs comme "Monday 17:00" et "Monday 19:00"? Sinon, je suppose que je devrai avoir des clés séparées pour le jour et l'heure pour le début et la fin de la fenêtre de temps.

Des pensées?

grâce

Répondre

4

Vous pouvez utiliser un utilitaire qui analysera votre texte de la semaine dans une énumération System.DayOfWeek, example here. Vous pouvez ensuite utiliser le Enum dans une comparaison contre la DateTime.Now.DayOfWeek

+1

Il y a méthode générique Enum.TryParse dans .NET 4.0 –

+0

Bezzub @ Andrew - Bon à savoir, grand commentaire! – Lazarus

+0

Si vous n'utilisez pas .NET 4.0, la structure DateTime dispose également d'une méthode TryParse. –

1

Vous pouvez utiliser la propriété DayOfTheWeek du DateTime. Et pour vérifier l'heure, vous pouvez utiliser DateTime.Today (renvoie l'heure et la date à aujourd'hui avec l'heure réglée sur 00:00:00) et ajouter la quantité nécessaire d'heures et de minutes.

1

C'est un code très difficile, mais montre que vous pouvez vérifier un objet DateTime contenant l'heure actuelle que vous souhaitez faire:

protected bool IsOkToRunNow() 
{ 
    bool result = false; 

    DateTime currentTime = DateTime.Now; 

    if (currentTime.DayOfWeek != DayOfWeek.Monday && (currentTime.Hour <= 17 || currentTime.Hour >= 19)) 
    { 
     result = true; 
    } 

    return result; 
} 
2

Vous pouvez enregistrer le jour de la semaine et commencer à l'heure et endHour dans votre fichier de configuration, puis utilisez une fonction similaire à ce qui suit:

public bool ShouldRun(DateTime dateToCheck) 
{ 
    //These should be read from your config file: 
    var day = DayOfWeek.Monday; 
    var start = 17; 
    var end = 19; 

    return !dateToCheck.DayOfWeek == day && 
      !(dateToCheck.Hour >= start && dateToCheck.Hour < end); 
} 
1

l'objet DateTime ne peut pas gérer une valeur qui signifie que tous les Lundis. Ce devrait être un lundi spécifique. Il y a une énumération DayOfWeek. Un autre objet pouvant vous aider est un objet TimeSpan. Vous pouvez utiliser le DayOfWeek combiné avec TimeSpan pour vous dire quand commencer, utilisez une autre TimeSpan pour vous dire combien de temps