Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Probleme beim Verarbeiten von Datumswerten

Geschrieben von: Christian Koller
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

Als Entwickler von Web Sites ist das Datumsformat ein Problem, bei dem man sehr schnell anstößt - besonders, wenn man auf deutschen Servern entwickelt (Ländereinstellung), und dann der Provider einen englischsprachig aufgesetzten Server betreibt - mit amerikanischen Datumseinstellungen. In diesem Artikel stelle ich eine Lösung vor, die auf allen Systemen die gewünschten Ergebnisse liefert.

Das in den deutschsprachigen Ländern gebräuchliche Datumsformat hat die Form Tag . Monat . Jahr (13.4.2000).

Hingegen ist in den USA das folgende Datumsformat gebräuchlich: Monat / Tag / Jahr (4/13/2000).

Wenn Sie nun unter ASP mit VBScript programmieren, so benutzt VBScript intern ein prinzipiell von der Ländereinstellung unabhängiges Datumsformat. Erst bei Ausgabe von Datumswerten oder bei der Umwandlung in Strings (Zeichenketten) wird das Datum entsprechend der Ländereinstellung formatiert.

Machen Sie auf einer ASP Seite einmal folgenden Test:

<%
' Laenderkennung auf Deutschland setzen
SetLocale("de")
strDatum = "14.2.2000"
datDatum = CDate(strDatum)

deDatum = CStr(datDatum)

' Laenderkennung auf USA setzen
SetLocale("en-us")
usDatum = CStr(datDatum)

Response.Write "Datum (US): " & usDatum & "<br>" & VbCrLf
Response.Write "Datum (Deutsch): " & deDatum & "<br>" & VbCrLf
%>

Das Ergebnis sieht wie folgt aus:

Datum (US): 2/14/00
Datum (Deutsch): 14.02.00

VBScript verwaltet intern Datumswerte auf eine Art und Weise, daß immer wenn ein Wert vom Variablentyp Date (deutsch. Datum) in einer Variable vom Typ String (deutsch. Zeichenkette) gespeichert wird, dieser Wert der Länderkennung entsprechend in das jeweilige Datumsformat umgewandelt wird. Bei einer Ausgabe einer Variable vom Typ Date mit Response.Write geschieht dies automatisch.

Für den Fall, daß Sie Ihre Internetseiten bei einem amerikanischen Provider hosten (z.B. InnerHost oder DataReturn), so sollten Sie auf einer ASP Seite, die mit Datumswerten arbeitet, die aktuelle Länderkennung für die Seite mittels SetLocale("de") auf Deutsch setzen. Nur so ist sichergestellt, daß deutsch formatierte Datumswerte in Zeichenketten bei der Umwandlung in Daten vom Typ Date richtig interpretiert werden. Dasselbe gilt auch für die Umwandlung eines Wertes von Typ Date in eine Zeichenkette.

Wenn man unter ASP mit Datenbanken wie Microsoft SQL Server 7.0 oder Microsoft Access 2000 arbeitet, dann kann es zu einem anderen Problem kommen. Falls Sie unter ADO (ActiveX Data Objects) mit SQL Befehlen arbeiten, um zum Beispiel Datensätze in eine Datenbank einzufügen, zu ändern oder zu löschen, so müssen Sie einen Datumswert in SQL wie folgt angeben: 'Monat/Tag/Jahr'.

Wie aber wandelt man ein deutsches Datum in ein Datum der US-amerikanischen Form um? Die folgenden VBScript-Funktionen lösen diese Aufgabe. Die Funktion DatumDEZuUS wandelt einen String, der ein deutsch formatiertes Datum enthält, in einen String mit US-amerikanisch formatierten Datum um. Die Funktion DatumUSZuDE macht genau das Gegenteil.

<%
Function DatumDEZuUS(deDatum)
	Dim strDatum, usDatum, dateDatum
	Dim OriginalLocale
	strDatum = CStr(deDatum)
	OriginalLocale = SetLocale("de")
	dateDatum = CDate(strDatum)
	SetLocale("en-us")
	usDatum = CStr(dateDatum)
	SetLocale(OriginalLocale)
	DatumDEZuUS = usDatum
End Function

Function DatumUSZuDE(usDatum)
	Dim strDatum, deDatum, dateDatum
	Dim OriginalLocale
	strDatum = CStr(usDatum)
	OriginalLocale = SetLocale("en-us")
	dateDatum = CDate(strDatum)
	SetLocale("de")
	deDatum = CStr(dateDatum)
	SetLocale(OriginalLocale)
	DatumUSZuDE = deDatum
End Function

Response.Write "DatumDEZuUS(""14.2.2000""): "
Response.Write DatumDEZuUS("14.2.2000") & "<br>" & VbCrLf
Response.Write "DatumUSZuDE(""2/14/2000""): "
Response.Write DatumUSZuDE("2/14/2000") & "<br>" & VbCrLf
%>

Das Ergebnis der letzen 4 Zeilen des vorhergehenden Skripts sieht wie folgt aus:

DatumDEZuUS("14.2.2000"): 2/14/00
DatumUSZuDE("2/14/2000"): 14.02.00

Damit haben Sie alle notwendigen Funktionen an der Hand, um ASP Seiten zu programmieren, die von den Ländereinstellungen des jeweiligen Web Servers unabhängig sind.

This printed page brought to you by AlphaSierraPapa

Verwandte Artikel

Ein einfacher Eventkalender für Projektteams
http:/www.aspheute.com/artikel/20020319.htm
Neue Inhalte einer Web Site für den Benutzer hervorheben
http:/www.aspheute.com/artikel/20010509.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.