Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - ICQ Verlauf - Sqlite Datenbank - FromoaDate Formatierung


DarkStaRX - So 21.04.13 18:41
Titel: ICQ Verlauf - Sqlite Datenbank - FromoaDate Formatierung
Guten Tag Entwickler,

ich habe mir ein kleines Programm geschrieben das den Verlauf von ICQ ausliest bzw in eine Listview auflistet.
Das Problem ist nur mit dem Datum / Uhrzeit.
Diese wird als "real" / float Zahl gespeichert.

z.B. so: 41384.8863773148
Dies entspricht: 20/04/2013 23:16:23
Wenn ich dann DateTime answer = DateTime.FromOADate(41384.8863773148); eingebe und dann
string Date = answer.ToShortDateString() + ", " + answer.ToLongTimeString(); schreibe bzw. auslese
bekomme ich auch diese Uhrzeit / Datum.
Das Problem ist nur wenn ich jetzt den Wert aus der Datenbank auslese und ihn als Double konventiere (vorraussetzung für die Methode FromOADate) bekomme ich eine falsche Uhrzeit.
Ich möchte die komplette Zahl OHNE auf /abrundung (nach 2. Kommarstelle) dort "einsetzen" und die Uhrzeit / Datum anzeigen.

Ich habe es schon mit Math.Abs versucht was leider auch nicht ganz geklappt hat weil er trotzdem irgendwie aufgerundet hat

Ein weiteres Problem ist die Zeitzone, die Uhrzeit wird 2Stunden angezeigt, wie bekomme ich die Sommerzeit mit einbezogen?

Ich bitte um Hilfe und bedanke mich jetzt schonmal!

MFG

//EDIT
Mit der Zeitzone habe ich es einfach gelöst indem ich einfach answer.AddHours(2) gemacht habe...


Ralf Jansen - So 21.04.13 19:27

Der Wert ist vermutlich in UTC. Darum solltest du explizit den Kind des DateTime auf UTC setzen (via DateTime.SpecifyKind) und danach per DateTime.ToLocalTime dir die Zeitzonen spezifische Zeit geben lassen. Die berücksichtigt dann auch eventuelle Sommerzeit-Regeln deiner Zeitzone.


DarkStaRX - So 21.04.13 19:41

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Der Wert ist vermutlich in UTC. Darum solltest du explizit den Kind des DateTime auf UTC setzen (via DateTime.SpecifyKind) und danach per DateTime.ToLocalTime dir die Zeitzonen spezifische Zeit geben lassen. Die berücksichtigt dann auch eventuelle Sommerzeit-Regeln deiner Zeitzone.


Also das mit der Zeitzone hab ich einfach erstmal so gelöst das jeder selber die Zeitzone angeben kann... und wenn es Monat >= 4 und <= 10 ist, ist es Sommerzeit ^^

Das wichtigere ist eher wie ich diese "Zahl" aus der Datenbank 1:1 in CSharp kriege, derzeit rundet er irgendwie immer irgendwie / irgendwo auf sodas ich +- 5min oder so in der Zeit habe.

Ich hab schon ziemlich viel ausprobiert nur finde keine Lösung da DateTime.FromOADate eine Zahl vom Typ Double brauch....


//EDIT

Okay ich habs gelöst.... ziemlich merkwürdig aber ich muss die Werte aus der Datenbank so auslesen:
RICHTIG: decimal timestamp = reader.GetDecimal(reader.GetOrdinal("date"));

FALSCH: decimal timestamp = Convert.toDecimal(reader[6]);

Merkwürdig aber naja...