Lieber Thomas, besten Dank für deine genauen Hinweise. Ich habe dabei aber, ehrlich gesagt, noch nicht ganz durchgeblickt. Da muss ich erst noch ein bisschen in der Dokumentation wühlen.
Außerdem: Ich habe nicht ausführlich genug gesagt, was ich vorhabe.
Ich habe in einer Tabelle für jeden Kalendertag einen Datensatz, in einer anderen Tabelle Kürzel für bestimmte fixe Zeitpunkte am Tag. Das sind z.B. Schulstunden, jedoch nicht einfach nummeriert, die Kürzel können auch alphanumerisch sein. In einer JOIN-Abfrage wird später für jeden Kalendertag/Std.-Kürzel ein Datensatz bebildet. Damit das eine sinnvolle Reihe ergibt, muss ich die Kalendertag/Std.-Kürzel sortieren können und das geht eben mit Kalenderdaten im String-Format nicht sinnvoll. Dazu hätte ich eben gerne das Kalenderdatum als TotalSeconds in einer eigenen Tabellenspalte genutzt. (Und ganz nebenbei hätte ich im Sekundenwert von TotalSeconds noch 59 Untereilungen eines Tages unterbringen können.) Meine alternative Lösung wäre, dass ich das Kalenderdatum TT.MM.JJJJ umbaue in JJJJ *1000000 + MM *10000 + TT *100. Und dann wären in den letzten beiden Stellen immer noch Platz für 99 numerisch sortierbare Unterteilungen des Tages. Dagegen ist eigentlich nichts einzuwenden, außer vielleicht, dass es sich hierbei um ein, wie heißt es so schön, arbiträres Format handelt. Oder doch?

beste Grüße, Christian Hahn.


----- Original Message ----- From: "Thomas Tempelmann" <[email protected]>
To: "REALbasic NUG German" <[email protected]>
Sent: Tuesday, March 08, 2011 6:51 PM
Subject: Re: Date.TotalSeconds speichern


Du mußt das Date-Setzen atomisch machen.
Eine Lösung wäre, dafür SQLDateTime zu verwenden. Den Wert kannst du
in die DB schreiben und auch wieder so rausholen.

Allerdings ist das SQL-Datum immer lokale Zeit. Noch besser wäre es,
eine UTC-Zeit aufzuzeichnen, damit auch bei einem Wechsel der Zeitzone
zw. Sichern und Auslesen immer noch die selbe Zeit rauskommt.

Hier sind 2 Methoden, die du so einfach in ein neues Modul kopieren solltest:

Function UTCDateTime(extends d as Date) As String
 // Returns a UTC value, i.e. a time independent of the current time zone

 dim d2 as new Date(d)
 d2.Hour = d.Hour - d.GMTOffset
 return d2.SQLDateTime.Replace(" ","T")+"Z"
End Function

Sub UTCDateTime(extends d as Date, assigns value as String)
 // Assigns a UTC value, i.e. a time independent of the current time zone

 if value.Right(1) = "Z" then
   d.SQLDateTime = value.Replace("T", " ").Left(value.Len-1)
   d.Hour = d.Hour + d.GMTOffset
 else
   raise new UnsupportedFormatException
 end
End Sub


Dann kannst du den Wert via

 d.UTCDateTime

abfragen und setzen.


--
Thomas Tempelmann, http://www.tempel.org/
Follow me on Twitter: http://twitter.com/#!/tempelorg


Antwort per Email an