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