Die CDate Funktion meldet auf Rechnern mit einem anderen Zeitformat einen Fehler bzw. ein falsches Ergebnis

Peter Brandt [Grutzeck Software GmbH]
04.04.2014 15:28

Beschreibung:
Die Funktion CDate() soll einen Wert wie z.B. den String "31.03.2014" in ein gültiges Datumsformat konvertieren.
--> Konvertiere = Convert; Datum = Date --> CDate

Problembeschreibung:
Die Funktion CDate() kann jedoch den übergebenen String "31.03.2014" nur in ein gültiges Datumformat konvertieren, wenn das auf dem Rechner eingestellte Zeitformat dd.mm.yyyy ist !

Ist das Format z.B. Englisch, so wird das Zeitformat mm.dd.yyyy erwartet und CDate zeigt eine Fehlermeldung an, da es nun mal keine 31 Monate gibt.

Ein anderes Beispiel in Japanisch, dort wird das Zeitformat yyyy.dd.mm erwartet und dadurch ebenfalls ein Fehler angezeigt.

Sollte zufälligerweise das übergebene Format trotzdem gültig sein, dann wird es falsch konvertiert werden z.B. bei allen Dati bei denen der Tag nicht größer als 12 ist --> "12.03.2014" geht auch im Englischen Format jedoch wird der 12. als Dezember (Monat) konvertiert und nicht wie gewünscht als der 12. Tag im Monat März !

Lösung:
Man setzt bevor man eine Datumskonvertierung macht das erwartete Zeitformat.
Dies geht über die VBScript Funktion:

  • SetLocale(<LCID>)

 

Die Liste der LCID (Locale ID) finden Sie in folgenden Microsoft Support Beitrag:
http://support.microsoft.com/default.aspx?id=221435

So kann man nun für das deutsche Zeitformat folgenden Aufruf durchführen:

SetLocale(1031)

Mit der Funktion GetLocale() kann man die aktuell aktive LCID auslesen.


Hinweis:
Das Setzen der LCID über die Funktion SetLocale ist nur solange wirksam, bis der entsprechende Context abgeschlossen wird.
Desweiteren ist die Änderung nur in dem selben Context wirksam. Das bedeutet, ändert man im Makro eines Hilfsmittels das Zeitformat und wird in dem Hilfsmittel noch ein weiteres aufgerufen, verwendet dieses Hilfsmittel den Standard und nicht das Zeitformat was zuvor gesetzt wurde.

Anderes Beispiel:
Werden zwei .vbs Dateien ausgeführt hat das setzen des Zeitformats in einer .vbs Datei keinen Einfluss auf die Zweite oder sonstige.

Sobald der Context verlassen wird (Makro ist durchgelaufen/abgeschlossen) ist somit auch wieder der Standard beim nächsten Aufruf des Makros aktiv.

Durchschnittliche Bewertung: 0 (0 Abstimmungen)

Kommentieren nicht möglich