Integer jeden Tag um 00:00 Uhr zurücksetzen

  • C#
  • .NET 4.5

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Kasi.

    Integer jeden Tag um 00:00 Uhr zurücksetzen

    Moin,
    ich habe einen einfachen Integer, der laufenden Bestellungen zählt.
    Der Integer soll jeweils nur innerhalb eines Tages Zählungen durchführen und wenn ein neuer Tag anbricht, soll er wieder auf 1 zurückgesetzt werden und dann wieder bis zum nächsten Tag zählen und dann wieder zurückgesetzt werden usw.

    Habe schon mit Datetime und Timespan rumsprobiert, aber habe Probleme damit, das umzusetzten, wenn das Program geschlossen und wiedergeöffnet wird.

    Freue mich über Tipps und Tricks. Gruß
    Einzelplatz? Mehrplatz? Datenbank? - WOW, da geizt jemand mit Infos.
    Ich würde einfach das Datum (als Zeitstempel) zur letzten Nullstellung mit speichern. Das dann beim Programmstart abfragen. War heute schon die Nullstellung durchgeführt worden, dann nicht, sonst durchführen und den Zeitstempel mit aktualisieren.
    @Visual_Prog Ich nehme mal an, dass das Programm x/24 läuft.
    Du musst einen Timer laufen lassen und die Time-Komponente von DateTime.Now mit dem Wert des letzten Ticks vergleichen. Ist sie kleiner bzw. fängt sie bei 0:0:0x an, setzt Du Deinen Zähler zurück.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Moin, ich glaube es klappt jetzt, habe es nicht haargenau umgesetzt wie vorgeschlagen, aber ähnlich, hier mein Vorschlag:

    - beliebiges Anfangsdatum mit Uhrzeit 00:00 festlegen.
    - akutelles Datum abrufen
    - das Anfangsdatum vom aktuellen Datum abziehen mittels Timespan
    - die Eigenschaft Timespan.Hours läuft über 24h, diese kann man dann nutzen, um zu schauen, ob ein neuer Tag begonnen hat
    - falls das Programm zwischendurch geschlossen wird mit Streamwriter die aktuellen Werte speichern


    C#-Quellcode

    1. public void BestellnummerFürJedenTag( DateTime paktuellesDatum)
    2. {
    3. TimeSpan _zeitdifferenz = new TimeSpan();
    4. DateTime _anfangsDatum = new DateTime(2021, 6, 19, 0, 0, 0);
    5. _zeitdifferenz = paktuellesDatum.Subtract(_anfangsDatum);
    6. StreamWriter _swbestellnummer;
    7. if (_zeitdifferenz.Hours <= 24)
    8. {
    9. _swbestellNummer = new StreamWriter(_pfad);
    10. _bestellNummer+= 1;
    11. _swbestellnummer.WriteLine(_bestellNummer);
    12. _swbestellnummer.Close();
    13. }
    14. else
    15. {
    16. _swbestellNummer = new StreamWriter(_pfad);
    17. _bestellNummer = 1;
    18. __swbestellnummer.WriteLine("1");
    19. _swbestellnummer.Close();
    20. }


    Edit: Och nö doch nicht, der Compiler geht dann immer in den ersten Teil der If-Schleife rein. Werde mal weiterschauen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Visual_Prog“ ()

    @Thunderbolt mit TotalHours habe ich das umgekehrte Problem: da bleibt er immer im 2. Teil der If-Schleife stecken, da die totalHours ja immer > 24 sind.

    Ich frage mich, ob ein beliebiges Anfangsdatum tatsächlich sinnvoll ist, habe ja den DateTime _anfangsDatum = new DateTime(2021, 6, 19, 0, 0, 0); festgelegt. Oder ob es besser ist, diesen auf heute oder gestern festzulegen. Oder ist doch ein ganz anderer Ansatz sinvoll?

    Visual_Prog schrieb:

    Moin,
    ich habe einen einfachen Integer, der laufenden Bestellungen zählt.
    Der Integer soll jeweils nur innerhalb eines Tages Zählungen durchführen und wenn ein neuer Tag anbricht, soll er wieder auf 1 zurückgesetzt werden und dann wieder bis zum nächsten Tag zählen und dann wieder zurückgesetzt werden usw.


    wenn es eine Datenbank ist, dann mit Select * Count die Anzahl Bestellungen am Tag X zählen,
    was das mit Timespan und zurücksetzen auf NUll soll verstehe ich nicht.