Benutzer mit den meisten Antworten
Uhrzeit vergleichen

Frage
-
Hallo.
Zu meinem Problem. Ich schreibe die aktuelle Uhrzeit in die Registry und würde dann gern eine if Abfrage machen ala:
if (regTime_cur >= 9){
MessageBox.Show("Scheinbar ist es später als 9")
}
Ich hoffe es ist klar was ich meine. Das funktioniert nicht, da ich regTime_cur als String Variable anlege. Das ist aber der einzige Typ der für mich möglich ist, vermutlich müsste man von einem DateTime in ein Int32 oder so umwandeln. Leider krieg ich nicht das nicht gebacken.
Wäre dankbar!
Antworten
-
Hallo Joe,
String regTime_cur = "10:08:43.0095090"; TimeSpan timeSpan = TimeSpan.Parse(regTime_cur); if (DateTime.Today.Add(timeSpan).Hour >= 9 && DateTime.Today.Add(timeSpan).Hour <= 11) { // Weitere Logik }
Aber warum speicherst Du ein TimeSpan wenn Du nur die Stundenangabe brauchst?
Gruss
Marcel- Als Antwort markiert Joe Waynsen Dienstag, 15. Februar 2011 20:23
Alle Antworten
-
Hallo Joe,
Du könntest DateTime.Now.ToBinary() verwenden um das Datum erst in ein long-Wert umzuwandeln. Long-Werte werden als String gespeichert, wenn Du den Registry-Typ nicht konkret angibst, deshalb in diesem Fall immer RegistryValueKind.QWord angeben.
Oder Du könntest die aktuelle Uhrzeit als String in die Registrierung schreiben und beim Einlesen dann über DateTime.Parse, DateTime.ParseExact, DateTime.TryParse, DateTime.TryParseExact wieder zu einem Datum konvertieren.
Wenn Dir das nicht ausreicht, kannst Du das Datum auch binär serialisieren und das Bytearray in die Registry schreiben. Das könnte grob umrissen so aussehen:
RegistryKey myKey = Registry.CurrentUser.OpenSubKey(@"Software\MyApp\MyKey", true); using (MemoryStream ms = new MemoryStream()) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, DateTime.Now); myKey.SetValue("Uhrzeit", ms.GetBuffer(), RegistryValueKind.Binary); byte[] serializedBytes = (byte[]) myKey.GetValue("Uhrzeit", null); if (serializedBytes != null) { ms.SetLength(0); ms.Write(serializedBytes, 0, serializedBytes.Length); ms.Position = 0; DateTime deserializedDateTime = (DateTime)formatter.Deserialize(ms); } }
Gruss
Marcel -
Hi,
Zu meinem Problem. Ich schreibe die aktuelle Uhrzeit in die Registry und würde dann gern eine if Abfrage machen ala:
if (regTime_cur >= 9){
MessageBox.Show("Scheinbar ist es später als 9")
}
um dazu helfen, müsste man wissen, was genau Du da in "regTime_cur" drin stehen hast.
Wenn da bspw. "16:31:57" o.#. steht, könntest Du bspw. versuchen, das über DateTime.TryParse( ... ) in ein Datum umzuwandeln und dann mittels <DateTimeVariable>.Hour >= 9 abzufragen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Versuche doch einfach die Ticks der Uhrzeit auszulesen und als string zu speichern:
Int64 cur_time = DateTime.Now.Ticks; String uhrzeit = cur_time.toString();
Die kannste dann einfach mit:
DateTime f = new DateTime(Int64.Parse(uhrzeit));
in eine Uhrzeit umwandeln
Florian Kowalsky -> If it was helpful please mark ist as helpful!! -
In "regTime_cur" steht das drinnen :10:08:43.0095090
Wie würde das anlegen dann ausschauen, ich hab das ja so:
String regTime_cur = Convert.ToString(key.GetValue("Uhrzeit"));
Wobei die Anweisung natürlich falsch sein wird, aber das einfache ändern des Types auf DateTime funktioniert nicht.
Und wie müsste die If Abfrage samt TryParse aussehen?
-
Hallo Florian,
> Versuche doch einfach die Ticks der Uhrzeit auszulesen und als string zu speichern [...]
Auch einfach:
myKey.SetValue("Uhrzeit", DateTime.Now.ToBinary(), RegistryValueKind.QWord); long dateValue = (long)myKey.GetValue("Uhrzeit"); DateTime myDate = DateTime.FromBinary(dateValue);
Gruss
Marcel -
Hallo Joe,
nimm da zum Beispiel den Ansatz von Stefan Falz.
Hier ein funktionsfähiges Beispiel:// Annahme: string regPfad = @"Software\Demo"; string regSubName = "Zeit"; DateTime vergleichsZeit = DateTime.Today.AddHours(9.0); //9:00 heute RegistryKey key = Registry.CurrentUser.CreateSubKey(regPfad); key.SetValue(regSubName, "10:08:43.0095090"); string zeitInhalt = key.GetValue("Zeit") as string; var zeit = DateTime.Parse(zeitInhalt); bool zeitGrößer9 = zeit > vergleichsZeit; MessageBox.Show("Die Reg-Zeit ist " + (zeitGrößer9 ? "später" : "früher oder gleich") + " als " + vergleichsZeit);
ciao Frank -
Danke schonmal. Ich kriegs nicht hin..
Vielleicht sollte ich mal eben mehr von mein Source preisgeben.
Aber als erstes muss ich mich entschuldigen, das mit der Uhrzeit in die Registry war unnötig. War ein logischer Denkfehler.
Der Sinn dieser Applikatoin ist einen Button nur um eine bestimmte Uhrzeit zwischen 9 und 11 freizugeben. Dazu nehm ich einmal die aktuelle Windows Systemzeit.
Meine bisherige Definition:
String regTime_cur = Convert.ToString(dateTimePicker1.Value.TimeOfDay); DateTime intDatum_cur = new DateTime(Int64.Parse(regTime_cur)); if (Convert.ToInt64(intDatum_cur) >= 9 && Convert.ToInt64(intDatum_cur) <= 11)
Das funktioniert natürlich nicht.
Auch mit "TimeSpan" hats bei mir nicht geklappt. Vielleicht kann man mir nocheinmal auf die Sprünge helfen. Danke!
-
Hallo Joe,
String regTime_cur = "10:08:43.0095090"; TimeSpan timeSpan = TimeSpan.Parse(regTime_cur); if (DateTime.Today.Add(timeSpan).Hour >= 9 && DateTime.Today.Add(timeSpan).Hour <= 11) { // Weitere Logik }
Aber warum speicherst Du ein TimeSpan wenn Du nur die Stundenangabe brauchst?
Gruss
Marcel- Als Antwort markiert Joe Waynsen Dienstag, 15. Februar 2011 20:23
-
Hallo Joe,
- ... einen Button nur um eine bestimmte Uhrzeit zwischen 9 und 11 freizugeben.
ja, dann geht das zum Beispiel so:
DateTime zeitAnfang = DateTime.Today.AddHours(9.0); //9:00 heute DateTime zeitEnde = DateTime.Today.AddHours(11.0); //11:00 bool imZeitraum = DateTime.Now > zeitAnfang && DateTime.Now <= zeitEnde; MessageBox.Show("Der Button wird " + (imZeitraum ? "aktiviert." : "deaktiviert."));
ciao Frank -
Danke, funktioniert wunderbar! :)
Danke für die Hilfe!
- Als Antwort markiert Joe Waynsen Dienstag, 15. Februar 2011 20:23
- Tag als Antwort aufgehoben Joe Waynsen Dienstag, 15. Februar 2011 20:23