Laden...

Zeitschaltplan: Ermitteln, ob ein Zeitpunkt innerhalb eines Zeitraums liegt

Erstellt von Manuals vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.973 Views
M
Manuals Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren
Zeitschaltplan: Ermitteln, ob ein Zeitpunkt innerhalb eines Zeitraums liegt

Hallo an alle,
bin hier ein absoluter Neuling.

Also dann zum Problem:
Und zwar bin ich momentan dabei einen Dienst zu programmieren, der einige TCP-Strings empfängt und dann etwas damit macht. Jedoch sollen diese TCP-Strings nur dann ausgewertet werden wenn der Dienst quasi scharf geschaltet ist.

In meiner Datenbank(MSSQL) speichere ich meine Zeiträume in denen der Dienst scharf sein soll wie folgt:

[pre]
nvarchar(50)      int              int          time(1)      time(1)
 Wochentag     Rollenzahl     Rollenindex     Startzeit     Endzeit

 Montag            1               1           07:00:00     18:00:00
  
 Dienstag          2               1           07:00:00     12:30:00

 Dienstag          2               2           15:30:00     20:00:00

[/pre]

Da die Phasen nie so lange sind hatte ich vor einen Timer zu nehmen.

Nun ist mir aber nicht ganz klar wie ich die DateTimes zu bilden habe, denn ich speichere kein Datum.

Erst hatte ich es dann mit folgendem versucht:


Timer a = new Timer;
a.Interval = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Days, <Stunden aus DB>, <Minuten aus DB>, <Sekunden aus DB>) - DateTime.Now).TotalMilliseconds();

Dies haut bei nem Tageswechsel nicht hin. Und der Dienst soll 24/7/365 im Einsatz sein.

Hättet ihr vielleicht eine bessere Variante oder Ideen wie ich die Probleme umschiffen und den Dienst so realisieren kann?

Danke im vorraus

S
417 Beiträge seit 2008
vor 10 Jahren

Hallo,

du kennst ja das Interval aus der DB. Dann reicht es doch aus zu prüfen, ob der Eingang der Nachricht (DateTime.UtcNow) in diesem Interval liegt.
Ich schreibe explizit vom Datum in UTC, da du es auch in UTC in der DB speichern solltest, um Probleme bei der Zeitumstellung zu vermeiden.
Den aktuellen Wochentag erhälst du ebenfalls über die DateTime-Klasse.

M
Manuals Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Was genau ist denn UTC? Habe gelesen das es eine Art Universal zeit ist. In DateTime.UtcNow-Eigenschaft habe ich ein Beispiel gefunden, welches mir scheinbar Zeiten aus anderen Zeitzonen liefert.

DateTime.UtcNow() liefert Datum und Uhrzeit wenn ich das richtig gesehen habe. In der Datenbank speichere ich ja nur die Uhrzeit und den Wochentag.

Demnach könnte ich nicht direkt den DateTime in UTC in die Datenbank speichern.
Bringts das denn wenn ich mir nur die Uhrzeit aus dem DateTime ziehe?

Eigentlich wars auch so geplant das ich mir mit DataGrids noch eine Oberfläche bastel, mit der ich den Zeitplan dann konfiguriere. Also mache ich ein nie DateTime.UtcNow() sondern ich schaue welche Felder des DataGrids grün sind und welche Rot. Ein Feld zählt für 30 Minuten. Kann ich mir dann die ermittelten Zeiten in UTC umwandeln?

Daaanke für die blitzschnelle hilfe =)

W
113 Beiträge seit 2006
vor 10 Jahren

Hallo Manuals,

dein Problem mit dem Tagwechsel bekommst du mit der Add-Methode von DateTime hin.

z.B.

DateTime.Now.Add(<timespan aus deiner DB>)

Schönen Gruß,
Xan

PS: UTC-Universal Time Coordinated

69 Beiträge seit 2009
vor 10 Jahren

Hallo Manuals,

vielleicht noch ein Tipp: So selbstgemachte Scheduler-Komponenten können schnell mal komplizierter werden (überschneidende Zeiten, Feiertage, Zeitumstellungen, Ausführungsverzögerungen, ...). Schau dir mal Quartz.NET an, das ist ein ziemlich umfangreicher Scheduler. Warum das Rad neu erfinden? 😉

M
Manuals Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Erstmal nochmal danke an alle für die Hilfe.
Jannemann13 genau sowas habe ich glaube ich gesucht. 😁 👍
Ich werde das so schnell wie möglich testen