Laden...

Tagsüber andere Aktionen als abends / Unterschiedliche Aktionen zu unterschiedlichen Zeiten

Erstellt von LittleTester vor 2 Jahren Letzter Beitrag vor 2 Jahren 323 Views
L
LittleTester Themenstarter:in
158 Beiträge seit 2019
vor 2 Jahren
Tagsüber andere Aktionen als abends / Unterschiedliche Aktionen zu unterschiedlichen Zeiten

Ich habe die Tage danach gesucht, wie ich bei einem Programm / Dienst eine Aktion tagsüber anders ausführen kann, als abends. Ein direktes Beispiel konnte ich nicht finden, sondern musste es mir zusammenreihmen. Heraus kam das hier und ich möchte es mit euch teilen 🙂.


var startTime = "08:00:00";
var endTime = "18:00:00";

if (DateTime.Now > DateTime.Parse(startTime) && DateTime.Now < DateTime.Parse(endTime))
{
    // Mach was zwischen 08:00 Uhr und 18:00 Uhr
} 
else 
{
    // Mach was außerhalb der oben genannten Zeit
}

IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6

T
2.219 Beiträge seit 2008
vor 2 Jahren

Was hast du den für einen Dienst?
Startet dieser periodisch oder läuft dieser in einer Schleife?

Beim ersten Ansatz könntest du einfach über die Aufgabenplanung den Task Frühs und Abends per Parameter durch die unterschiedlichen Verarbeitungen laufen lassen.
Wenn der Dienst dauerhaft läuft müsste die Prüfung wie folgt laufen.


DateTime startDateTime = ...; // Tagesbeginn
DateTime endDateTime = ...; // Tagesende
DateTime now = DateTime.Now;

// Prüfen ob die aktuelle Zeit ausserhalb der Tageszeit liegt.
if (now < startDateTime || now > endDateTime)
{
    // Verarbeitung für Nachts durchführen
}
else
{
    // Verarbeitung für Tags durchführen
}

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

P
441 Beiträge seit 2014
vor 2 Jahren

Uhrzeiten sind einfacher mit einem TimeSpan (Api-Docs) zu vergleichen. DateTime (Api-Docs) bietet dafür die Property TimeOfDay.

Ab .NET 6 gibt es dann übrigens passend dafür TimeOnly (Api-Docs).

Gleichzeitig bitte mit bedenken, dass DateTime keine Zeitzonen Informationen hat: [FAQ] DateTime vs. DateTimeOffset und der Umgang mit Zeiten in .NET

T
2.219 Beiträge seit 2008
vor 2 Jahren

@Papst
Hast natürlich recht, mit TimeSpan ist es sinnvoller umsetzbar 🙂

TimeOnly kannte ich noch nicht, sieht erstmal okay aus.
Wie genau sehen hier die Pläne dann für ein Zusammenleben mit TimeSpan/DateTime/TimeTimeOffset etc. aus?

Wirklich begeistert bin ich noch nicht davon, dass es nun neben TimeSpan noch TimeOnly geben soll.
Wie genau wird/soll TimeOnly hier integriert/genutzt werden?
Wenn DateTime* jetzt noch zusätzlich TimeOnly liefert macht es die Nutzung von DateTime* nur komplexer.
Ebenfalls fühlt es sich dann irgendwie redundant an wenn man quasi zwei Zeit Typen hat.
Und zukünftig wird man dann auch zwischen TimeSpan/TimeOnly hin und her konvertieren müssen.
So ganz klar ist mir also noch nicht warum nun TimeOnly eingeführt wird.

Und passend dazu gibt es auch DateOnly, was zusammen mit TimeOnly auch wieder DateTime* bilden kann.
Aus meiner Sicht eine komische Entscheidung, da es nur zu mehr Komplexität führt ohne erkennbaren nutzen.
Gibt es hier einen BLog Eintrag o.ä. weshalb es diese Datentypen nun gibt?

Nachtrag:
Hab einen passenen Blog Post gefunden, der aufzeigt wie man die neuen Typen nutzt.
Beispiele sind aber nicht das Non Plus Ultra aber sollten klar zeigen, wie es geht 🙂

Link

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

P
441 Beiträge seit 2014
vor 2 Jahren

Neben TimeOnly wird es auch DateOnly geben.
Die Use Cases sind ziemlich gut im Blog erklärt: Date, Time, and Time Zone Enhancements in .NET 6

L
LittleTester Themenstarter:in
158 Beiträge seit 2019
vor 2 Jahren

Der Dienst soll ständig im Hintergrund laufen. In meinem Fall wollte ich, dass der Onlinestatus tagsüber alle X Stunden ausgegeben wird, nach Feierabend, wenn Rechner / Server i.d.R. entweder eh an oder aus sind und sich daran nichts mehr ändert wollte ich die Zeitspanne höher setzen. (Server sind natürlich eh immer an) Immerhin wird die Datenbank bei einem Webhoster gehostet und da muss man ja nicht ständig sinnlos Verbindung aufnehmen. K.A. ob das ins Gewicht fallen würde oder nicht. Der Dienst soll am Ende auf ~80-90 Rechnern laufen und ausschließlich mitteilen ob Rechner / Server online oder offline.

Momentan schwanke ich aber, ob das Vorhaben noch sinnvoll ist. Im Grunde würde es reichen den Onlinestatus bei den Workstations / Laptops beim Hochfahren zu ermitteln (mit meinem Tool, das ich entwickle) und bei den Servern das extra zu regeln. Es gibt aber einige Rechner die im Grunde immer an sind, wie beispielsweise meiner im Büro und es dann schon wichtig wäre zu wissen, dass dieser verwendet wird und nicht nur rum steht. Wenn ich den Rechner zwei Wochen nicht neu starte hat man in der Datenbank entsprechend stehen, dass der Rechner zuletzt vor zwei Wochen gestartet wurde, also kaum benutzt wird. Das dem nicht so ist würde man daran erkennen, dass er sich immer wieder Online meldet.

Nichts desdo trotz wollte ich den Code halt mit euch teilen, weil es der ein oder andere sicher gebrauchen könnte. Das er nicht ganz perfekt war und als Snippets nicht taugte ist ein anderes Thema 🙁

IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6