Mit der Uhrzeit programmieren in C#?

4 Antworten

time ist in dem Fall ein komplettes Datum mit Uhrzeit. Das kannst du nicht einfach nur einer Zahl vergleichen. Ich schreibe gerade am Handy, deshalb kann ich nicht testen, aber wenn du hinter time einen Punkt schreibst, müsste dir Visual Studio alle Eigenschaften und Methoden anzeigen, die du bei einem DateTime Objekt benutzen kannst. Die aktuelle Stunde heißt da Hour oder HourOfDay. Damit kannst du dann prüfen, ob sie größer oder kleiner als 20 ist.

das DateTime -objekt bringt alles mit um direkte Vergleiche (ohne irgendwelchen großartigen Zauber zu veranstalten)

Die Methode DateTime.Compare() ist genau das was Du benötigst:

using System;
class Prog{
    public static void Main(string[] args){
        string tageszeit="grummel";
        DateTime jetzt = DateTime.Now;
        Console.WriteLine(jetzt);
        Console.WriteLine(DateTime.Compare(jetzt, Convert.ToDateTime("12:00"))); //immer -1,0 oder 1


        if (DateTime.Compare(jetzt, Convert.ToDateTime("04:00")) >= 0) tageszeit = "Morgen"; 
        if (DateTime.Compare(jetzt, Convert.ToDateTime("12:00")) >= 0) tageszeit = "Tag";
        if (DateTime.Compare(jetzt, Convert.ToDateTime("18:00")) >= 0) tageszeit = "Abend";
        Console.WriteLine("Guten {0}",tageszeit);
        Console.ReadKey();
    }
}

mir persönlich gefällt es jedoch besser mit Timespan zu arbeiten:

using System;
class Prog{
    public static void Main(string[] args){
        string tageszeit="grummel";
        DateTime jetzt = DateTime.Now;
        DateTime mitternacht = Convert.ToDateTime("0:00");
        TimeSpan seitMitternacht = jetzt - mitternacht;
        Console.WriteLine("Zeitspanne seit Mitternacht: {0});",seitMitternacht) ;


        if (seitMitternacht >= TimeSpan.Parse("04:00"))  tageszeit="Morgen";
        if (seitMitternacht >= TimeSpan.Parse("12:00"))  tageszeit="Tag"; 
        if (seitMitternacht >= TimeSpan.Parse("18:00"))  tageszeit="Abend";
        Console.WriteLine("Guten {0}",tageszeit);


        Console.ReadKey();
    }
}

die Tageszeiten beziehen sich in dem Fall auf die seit Mittrnacht abgelaufene Zeit eine Zeitspanne ergibt sich durch simple Subtrakion zweier DateTimes.

der Vorteil dieses Vorgehens, man hat auch immer Zugriff auf eine reale Zahl mit der sich auch viele andere operationen bewerkstelligen lassen (via TimSpan .Total...) (TotalHours ..TotalNanoseconds)

Guten Abend,

du solltest das mit DateTime.Hour und mit einem if oder switch machen.

Zum Beispiel:

// Aktuelle Uhrzeit abrufen

    DateTime jetzt = DateTime.Now;
    int stunde = jetzt.Hour;
    string gruss;
    if (stunde >= 12 && stunde < 18)
    {
      gruss = "Guten Tag";
    }
    else if (stunde >= 18)
    {
      gruss = "Guten Abend";
    }
    else
    {
      gruss = "Guten Morgen";
    }
    Console.WriteLine(gruss);
  }
}
Woher ich das weiß:Hobby – C# Entwickler seit 2021
Dann428 
Fragesteller
 07.10.2023, 22:34

Vielen dank dir, jetzt kann ich mein programm endlich weiter schreiben :)

0
Erzesel  08.10.2023, 12:37

Du brauchst die else-konstrukte nich wirklich...

Einfach Stumpf eine Kette von Optionen von abarbeiten, da wiederholte setzen der gleichen Variable in diesem einfachen Fall kein zeitrelevantes Problem darstellt. der Letzte passende wert bleibt ...

1

Das DateTime-struct bildet die Informationen eines kompletten Zeitstempels ab, ist also mehr als nur eine Zahl.

Um die aktuelle Stunde zu erhalten, kannst du das Hour-Property abrufen.

if (time.Hour > 20)
{
  // ...
}