RobertG hat geschrieben:Ich habe die Datumsfelder immer mit updateString bearbeitet
Hallo RobertG!
Zur Vollständigkeit muß ich noch den
Timestamp nachschieben.
Ich habe gelesen, dass die
Verwendung der UNO-Strukte der String-Übergebe vorzuziehen sei, weil diese 100% Plattformunabhängig ist - hier also die ganze Geschichte:
Das updaten eines Timestamp-Feldes (es enthält sowohl Datum als auch Uhrzeit) ist etwas problematisch, wenn dieses im Formular in 2 getrennten Feldern dargestellt wird. Das ist z.B. die Voreinstellung des Formular-Assistenten: Er baut für ein Timestamp-Feld automatisch immer ein Zeitfeld und ein Datumsfeld nebeneinander - das ist praktisch und sieht gut aus, hat aber auch seine Tücken!
Will man nämlich diese Felder getrennt updaten (also das Zeitfeld mit "updateTime" und das Datumsfeld mit "updateDate") wird das jeweils andere Feld auf 0 gestellt (beim Datumsfeld erkennbar als 01.01.1800)!!
Hier muß der Uno-Strukt "util.DateTime" und die Update-Methode "updateTimestamp" verwendet werden.
Bei einem Formular mit getrennten Feldern für Datum + Uhzeit muß dann
nur das Datumsfeld mit "updateTimestamp" befüllt werden - das Zeitfeld wird dabei nämlich automatisch mit aktualisiert!
Nachfolgend habe ich noch einmal alle 3 Strukte und Methoden zur Datums- und Zeit-Manipulation als Code zusammengefasst:
Code: Alles auswählen
' Strukte fuer Zeit, Datum und Zeitstempel bereitstellen:
Dim unoTime As New com.sun.star.util.Time
Dim unoDate As New com.sun.star.util.Date
Dim unoStmp As New com.sun.star.util.DateTime
' Beispielhaft mal Systemdatum und -Zeit in einer separaten Variablen bereitstellen:
Dim ActDate As Date
ActDate = Now()
' Jetzt die Strukte einzeln mit den gewuenschten Zeitraeumen auffuellen
' (Millisekunden werden von BASIC nicht verarbeitet
' und werden hier nur zur Vollstaendigekeit gezeigt):
With unoTime
.HundredthSeconds = 0
.Seconds = Second(ActDate)
.Minutes = Minute(ActDate)
.Hours = Hour(ActDate)
End With
With unoDate
.Day = Day(ActDate)
.Month = Month(ActDate)
.Year = Year(ActDate)
End With
With unoStmp
.HundredthSeconds = 0
.Seconds = Second(ActDate)
.Minutes = Minute(ActDate)
.Hours = Hour(ActDate)
.Day = Day(ActDate)
.Month = Month(ActDate)
.Year = Year(ActDate)
End With
' Zeit-, Datums- und Zeitstempelfeld aktualisieren (angenommen, die Felder wurden mit
' Objektvariablen namens "MyTimeField", "MyDateField" und "MyStampField" refferenziert):
MyTimeField.BoundField.updateTime(unoTime) ' ACHTUNG: loescht bei einem Timestamp das Datum!
MyDateField.BoundField.updateDate(unoDate) ' ACHTUNG: loescht bei einem Timestamp die Uhrzeit!
MyStampField.BoundField.updateTimestamp(unoStmp) ' setzt sowohl Datum als auch Uhrzeit
Man merkt: ich beschäftige mich z.Zt. intensiv mit Datums- und Zeit Funktionen!
Gruß: ejomi
[quote="RobertG"]Ich habe die Datumsfelder immer mit updateString bearbeitet[/quote]
Hallo RobertG!
Zur Vollständigkeit muß ich noch den [b]Timestamp[/b] nachschieben.
Ich habe gelesen, dass die [u]Verwendung der UNO-Strukte der String-Übergebe vorzuziehen sei[/u], weil diese 100% Plattformunabhängig ist - hier also die ganze Geschichte:
Das updaten eines Timestamp-Feldes (es enthält sowohl Datum als auch Uhrzeit) ist etwas problematisch, wenn dieses im Formular in 2 getrennten Feldern dargestellt wird. Das ist z.B. die Voreinstellung des Formular-Assistenten: Er baut für ein Timestamp-Feld automatisch immer ein Zeitfeld und ein Datumsfeld nebeneinander - das ist praktisch und sieht gut aus, hat aber auch seine Tücken!
Will man nämlich diese Felder getrennt updaten (also das Zeitfeld mit "updateTime" und das Datumsfeld mit "updateDate") wird das jeweils andere Feld auf 0 gestellt (beim Datumsfeld erkennbar als 01.01.1800)!!
Hier muß der Uno-Strukt "util.DateTime" und die Update-Methode "updateTimestamp" verwendet werden.
Bei einem Formular mit getrennten Feldern für Datum + Uhzeit muß dann [u]nur das Datumsfeld mit "updateTimestamp"[/u] befüllt werden - das Zeitfeld wird dabei nämlich automatisch mit aktualisiert!
Nachfolgend habe ich noch einmal alle 3 Strukte und Methoden zur Datums- und Zeit-Manipulation als Code zusammengefasst:
[code]' Strukte fuer Zeit, Datum und Zeitstempel bereitstellen:
Dim unoTime As New com.sun.star.util.Time
Dim unoDate As New com.sun.star.util.Date
Dim unoStmp As New com.sun.star.util.DateTime
' Beispielhaft mal Systemdatum und -Zeit in einer separaten Variablen bereitstellen:
Dim ActDate As Date
ActDate = Now()
' Jetzt die Strukte einzeln mit den gewuenschten Zeitraeumen auffuellen
' (Millisekunden werden von BASIC nicht verarbeitet
' und werden hier nur zur Vollstaendigekeit gezeigt):
With unoTime
.HundredthSeconds = 0
.Seconds = Second(ActDate)
.Minutes = Minute(ActDate)
.Hours = Hour(ActDate)
End With
With unoDate
.Day = Day(ActDate)
.Month = Month(ActDate)
.Year = Year(ActDate)
End With
With unoStmp
.HundredthSeconds = 0
.Seconds = Second(ActDate)
.Minutes = Minute(ActDate)
.Hours = Hour(ActDate)
.Day = Day(ActDate)
.Month = Month(ActDate)
.Year = Year(ActDate)
End With
' Zeit-, Datums- und Zeitstempelfeld aktualisieren (angenommen, die Felder wurden mit
' Objektvariablen namens "MyTimeField", "MyDateField" und "MyStampField" refferenziert):
MyTimeField.BoundField.updateTime(unoTime) ' ACHTUNG: loescht bei einem Timestamp das Datum!
MyDateField.BoundField.updateDate(unoDate) ' ACHTUNG: loescht bei einem Timestamp die Uhrzeit!
MyStampField.BoundField.updateTimestamp(unoStmp) ' setzt sowohl Datum als auch Uhrzeit[/code]
Man merkt: ich beschäftige mich z.Zt. intensiv mit Datums- und Zeit Funktionen!
Gruß: ejomi