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

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Probleme beim Verarbeiten von Datumswerten

Geschrieben von: Christian Koller
Kategorie: ASP Tricks

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.

Verwandte Artikel

Ein einfacher Eventkalender für Projektteams
Neue Inhalte einer Web Site für den Benutzer hervorheben

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©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.