Vorgehensweise: Anzeigen lokalisierter Datums- und Uhrzeitangaben für WebbenutzerHow to: Display Localized Date and Time Information to Web Users

Da eine Webseite überall in der Welt angezeigt werden kann, sollten Vorgänge, die Datums- und Uhrzeitwerte analysieren und formatieren, bei der Interaktion mit dem Benutzer nicht von einem Standardformat (am häufigsten das Format der lokalen Kultur des Webservers) abhängen.Because a Web page can be displayed anywhere in the world, operations that parse and format date and time values should not rely on a default format (which most often is the format of the Web server's local culture) when interacting with the user. Stattdessen sollten Webformulare, die vom Benutzer eingegebene Datums- und Uhrzeitzeichenfolgen behandeln, die Zeichenfolgen gemäß der bevorzugten Kultur des Benutzers analysieren.Instead, Web forms that handle date and time strings input by the user should parse the strings using the user's preferred culture. Entsprechend sollten Datums- und Uhrzeitdaten dem Benutzer in einem Format angezeigt werden, das seiner Kultur entspricht.Similarly, date and time data should be displayed to the user in a format that conforms to the user's culture. In diesem Thema wird gezeigt, wie Sie dazu vorgehen müssen.This topic shows how to do this.

So analysieren Sie vom Benutzer eingegebene Datums- und UhrzeitzeichenfolgenTo parse date and time strings input by the user

  1. Bestimmen Sie, ob das von der HttpRequest.UserLanguages-Eigenschaft zurückgegebene Zeichenfolgenarray gefüllt ist.Determine whether the string array returned by the HttpRequest.UserLanguages property is populated. Wenn dies nicht der Fall ist, fahren Sie mit Schritt 6 fort.If it is not, continue to step 6.

  2. Wenn das von der UserLanguages-Eigenschaft zurückgegebene Zeichenfolgenarray aufgefüllt ist, rufen Sie sein erstes Element ab.If the string array returned by the UserLanguages property is populated, retrieve its first element. Das erste Element gibt die Standardeinstellung des Benutzers oder seine bevorzugte Sprache und Region an.The first element indicates the user's default or preferred language and region.

  3. Instanziieren Sie ein CultureInfo-Objekt durch Aufrufen des CultureInfo.CultureInfo(String, Boolean)-Konstruktors, das die bevorzugte Kultur des Benutzers darstellt.Instantiate a CultureInfo object that represents the user's preferred culture by calling the CultureInfo.CultureInfo(String, Boolean) constructor.

  4. Rufen Sie entweder die TryParse- oder Parse-Methode des DateTime- oder DateTimeOffset-Typs ab, um die Konvertierung zu versuchen.Call either the TryParse or the Parse method of the DateTime or DateTimeOffset type to try the conversion. Verwenden Sie eine Überladung der TryParse- oder Parse-Methode mit einem provider-Parameter, und übergeben Sie sie an eines der folgenden Objekte:Use an overload of the TryParse or the Parse method with a provider parameter, and pass it either of the following:

  5. Wenn bei der Konvertierung ein Fehler auftritt, wiederholen Sie die Schritte 2 bis 4 für jedes verbleibende Element im von der UserLanguages-Eigenschaft zurückgegebenen Zeichenfolgenarray.If the conversion fails, repeat steps 2 through 4 for each remaining element in the string array returned by the UserLanguages property.

  6. Wenn bei der Konvertierung weiterhin ein Fehler auftritt, oder das von der UserLanguages-Eigenschaft zurückgegebene Zeichenfolgenarray leer ist, analysieren Sie die Zeichenfolge mit der invarianten Kultur, die durch die CultureInfo.InvariantCulture-Eigenschaft zurückgegeben wird.If the conversion still fails or if the string array returned by the UserLanguages property is empty, parse the string by using the invariant culture, which is returned by the CultureInfo.InvariantCulture property.

So analysieren Sie lokales Datum und Ortszeit der Anforderung des BenutzersTo parse the local date and time of the user's request

  1. Fügen Sie einem Webformular ein HiddenField-Steuerelement hinzu.Add a HiddenField control to a Web form.

  2. Erstellen Sie eine JavaScript-Funktion, die das onClick-Ereignis einer Submit-Schaltfläche behandelt, indem sie aktuelles Datum und aktuelle Uhrzeit sowie den Offset zwischen der lokalen Zeitzone und der koordinierten Weltzeit (UTC) in die Value-Eigenschaft schreibt.Create a JavaScript function that handles the onClick event of a Submit button by writing the current date and time and the local time zone's offset from Coordinated Universal Time (UTC) to the Value property. Verwenden Sie ein Trennzeichen (z.B. ein Semikolon), um die beiden Komponenten der Zeichenfolge zu trennen.Use a delimiter (such as a semicolon) to separate the two components of the string.

  3. Verwenden Sie das PreRender-Ereignis des Webformulars, um die Funktion durch Übergeben des Skripttexts an die ClientScriptManager.RegisterClientScriptBlock(Type, String, String, Boolean)-Methode in den HTML-Ausgabestream einzufügen.Use the Web form's PreRender event to inject the function into the HTML output stream by passing the text of the script to the ClientScriptManager.RegisterClientScriptBlock(Type, String, String, Boolean) method.

  4. Verbinden Sie den Ereignishandler durch Übergabe des Namens der JavaScript-Funktion an das OnClientClick-Attribut der Submit-Schaltfläche mit dem onClick-Ereignis der Submit-Schaltfläche.Connect the event handler to the Submit button's onClick event by providing the name of the JavaScript function to the OnClientClick attribute of the Submit button.

  5. Erstellen Sie einen Ereignishandler für das Click-Ereignis der Submit-Schaltfläche.Create a handler for the Submit button's Click event.

  6. Bestimmen Sie im Ereignishandler, ob das von der HttpRequest.UserLanguages-Eigenschaft zurückgegebene Zeichenfolgenarray gefüllt ist.In the event handler, determine whether the string array returned by the HttpRequest.UserLanguages property is populated. Wenn dies nicht der Fall ist, fahren Sie mit Schritt 14 fort.If it is not, continue to step 14.

  7. Wenn das von der UserLanguages-Eigenschaft zurückgegebene Zeichenfolgenarray gefüllt ist, rufen Sie sein erstes Element ab.If the string array returned by the UserLanguages property is populated, retrieve its first element. Das erste Element gibt die Standardeinstellung des Benutzers oder seine bevorzugte Sprache und Region an.The first element indicates the user's default or preferred language and region.

  8. Instanziieren Sie ein CultureInfo-Objekt durch Aufrufen des CultureInfo.CultureInfo(String, Boolean)-Konstruktors, das die bevorzugte Kultur des Benutzers darstellt.Instantiate a CultureInfo object that represents the user's preferred culture by calling the CultureInfo.CultureInfo(String, Boolean) constructor.

  9. Übergeben Sie die Zeichenfolge, die der Value-Eigenschaft zugewiesen ist, der Split-Methode, um die Zeichenfolgendarstellung des lokalen Datums und der Ortszeit des Benutzers und die Zeichenfolgendarstellung des Offsets der lokalen Zeitzone des Benutzers in separaten Arrayelementen zu speichern.Pass the string assigned to the Value property to the Split method to store the string representation of the user's local date and time and the string representation of the user's local time zone offset in separate array elements.

  10. Rufen Sie entweder die DateTime.Parse- oder DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime)-Methode zum Konvertieren von Datum und Uhrzeit der Anforderung des Benutzers in einen DateTime-Wert auf.Call either the DateTime.Parse or DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) method to convert the date and time of the user's request to a DateTime value. Verwenden Sie eine Überladung der Methode mit einem provider-Parameter, und übergeben Sie sie an eines der folgenden Objekte:Use an overload of the method with a provider parameter, and pass it either of the following:

  11. Wenn beim Analysevorgang in Schritt 10 ein Fehler auftritt, fahren Sie mit Schritt 13 fort.If the parse operation in step 10 fails, go to step 13. Rufen Sie andernfalls die UInt32.Parse(String)-Methode auf, um die Zeichenfolgendarstellung des Offsets der Zeitzone des Benutzers in eine ganze Zahl zu konvertieren.Otherwise, call the UInt32.Parse(String) method to convert the string representation of the user's time zone offset to an integer.

  12. Instanziieren Sie ein DateTimeOffset-Objekt durch Aufrufen des DateTimeOffset.DateTimeOffset(DateTime, TimeSpan)-Konstruktors, das die Ortszeit des Benutzers darstellt.Instantiate a DateTimeOffset that represents the user's local time by calling the DateTimeOffset.DateTimeOffset(DateTime, TimeSpan) constructor.

  13. Wenn bei der Konvertierung in Schritt 10 ein Fehler auftritt, wiederholen Sie die Schritte 7 bis 12 für jedes verbleibende Element im von der UserLanguages-Eigenschaft zurückgegebenen Zeichenfolgenarray.If the conversion in step 10 fails, repeat steps 7 through 12 for each remaining element in the string array returned by the UserLanguages property.

  14. Wenn bei der Konvertierung weiterhin ein Fehler auftritt, oder das von der UserLanguages-Eigenschaft zurückgegebene Zeichenfolgenarray leer ist, analysieren Sie die Zeichenfolge mit der invarianten Kultur, die durch die CultureInfo.InvariantCulture-Eigenschaft zurückgegeben wird.If the conversion still fails or if the string array returned by the UserLanguages property is empty, parse the string by using the invariant culture, which is returned by the CultureInfo.InvariantCulture property. Wiederholen Sie dann die Schritte 7 bis 12.Then repeat steps 7 through 12.

Das Ergebnis ist ein DateTimeOffset-Objekt, das die Ortszeit des Benutzers auf Ihrer Webseite darstellt.The result is a DateTimeOffset object that represents the local time of the user of your Web page. Sie können dann die entsprechende UTC durch Aufrufen der ToUniversalTime-Methode bestimmen.You can then determine the equivalent UTC by calling the ToUniversalTime method. Sie können das entsprechende Datum und die Uhrzeit auch durch Aufrufen der TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo)-Methode und Übergabe eines Werts von TimeZoneInfo.Local als Zeitzone, in die die Uhrzeit konvertiert werden soll, auf dem Webserver bestimmen.You can also determine the equivalent date and time on your Web server by calling the TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo) method and passing a value of TimeZoneInfo.Local as the time zone to convert the time to.

BeispielExample

Das folgende Beispiel enthält die HTML-Quelle und den Code für ein ASP.NET-Webformular, das den Benutzer auffordert, einen Wert für Datum und Uhrzeit einzugeben.The following example contains both the HTML source and the code for an ASP.NET Web form that asks the user to input a date and time value. Ein clientseitiges Skript schreibt auch Informationen über das lokale Datum und die Uhrzeit der Anforderung des Benutzers sowie den Offset zwischen der Zeitzone des Benutzers und UTC in ein ausgeblendetes Feld.A client-side script also writes information on the local date and time of the user's request and the offset of the user's time zone from UTC to a hidden field. Diese Informationen werden dann durch den Server analysiert, der eine Webseite zurückgibt, die die Eingabe des Benutzers angezeigt.This information is then parsed by the server, which returns a Web page that displays the user's input. Es werden auch Datum und Uhrzeit der Anforderung des Benutzers unter Verwendung von Ortszeit des Benutzers, Uhrzeit auf dem Server und UTC angezeigt.It also displays the date and time of the user's request using the user's local time, the time on the server, and UTC.


<%@ Page Language="C#" %>
<%@ Import Namespace="System.Globalization" %>
<%@ Assembly Name="System.Core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void OKButton_Click(object sender, EventArgs e)
    {
        string locale = "";
        DateTimeStyles styles = DateTimeStyles.AllowInnerWhite | DateTimeStyles.AllowLeadingWhite |
                                       DateTimeStyles.AllowTrailingWhite;
        DateTime inputDate;
        DateTime localDate = DateTime.Now;
        DateTimeOffset localDateOffset = DateTimeOffset.Now;
        int integerOffset;
        bool result = false;

        // Exit if input is absent.
        if (string.IsNullOrEmpty(this.DateString.Text)) return;

        // Hide form elements.
        this.DateForm.Visible = false;

        // Create array of CultureInfo objects
        CultureInfo[] cultures = new CultureInfo[Request.UserLanguages.Length + 1];
        for (int ctr = Request.UserLanguages.GetLowerBound(0); ctr <= Request.UserLanguages.GetUpperBound(0);
             ctr++)
        {
            locale = Request.UserLanguages[ctr];
            if (! string.IsNullOrEmpty(locale))
            {

                // Remove quality specifier, if present.
                if (locale.Contains(";"))
                   locale = locale.Substring(locale.IndexOf(';') -1);
                try
                {
                    cultures[ctr] = new CultureInfo(Request.UserLanguages[ctr], false);
                }
                catch (Exception) { }
            }
            else
            {
                cultures[ctr] = CultureInfo.CurrentCulture;
            }
        }
        cultures[Request.UserLanguages.Length] = CultureInfo.InvariantCulture;
        // Parse input using each culture.
        foreach (CultureInfo culture in cultures)
        {
            result = DateTime.TryParse(this.DateString.Text, culture.DateTimeFormat, styles, out inputDate);
            if (result) break;
        }
        // Display result to user.
        if (result)
        {
            Response.Write("<P />");
            Response.Write("The date you input was " + Server.HtmlEncode(this.DateString.Text) + "<BR />");
        }
        else
        {
            // Unhide form.
            this.DateForm.Visible = true;
            Response.Write("<P />");
            Response.Write("Unable to recognize " + Server.HtmlEncode(this.DateString.Text) + ".<BR />");
        }

        // Get date and time information from hidden field.
        string[] dates= Request.Form["DateInfo"].Split(';');

        // Parse local date using each culture.
        foreach (CultureInfo culture in cultures)
        {
            result = DateTime.TryParse(dates[0], culture.DateTimeFormat, styles, out localDate);
            if (result) break;
        }
        // Parse offset 
        result = int.TryParse(dates[1], out integerOffset);
        // Instantiate DateTimeOffset object representing user's local time
        if (result) 
        {
            try
            {
                localDateOffset = new DateTimeOffset(localDate, new TimeSpan(0, -integerOffset, 0));
            }
            catch (Exception)
            {
                result = false;
            }
        }
        // Display result to user.
        if (result)
        {
            Response.Write("<P />");
            Response.Write("Your local date and time is " + localDateOffset.ToString() + ".<BR />");
            Response.Write("The date and time on the server is " + 
                           TimeZoneInfo.ConvertTime(localDateOffset, 
                                                    TimeZoneInfo.Local).ToString() + ".<BR />");
            Response.Write("Coordinated Universal Time is " + localDateOffset.ToUniversalTime().ToString() + ".<BR />");
        }
        else
        {
            Response.Write("<P />");
            Response.Write("Unable to recognize " + Server.HtmlEncode(dates[0]) + ".<BR />");
        }
    }

    protected void Page_PreRender(object sender, System.EventArgs e)
    {
        string script = "function AddDateInformation() { \n" +
                  "var today = new Date();\n" +
                  "document.DateForm.DateInfo.value = today.toLocaleString() + \";\" + today.getTimezoneOffset();\n" +
                  " }";
        // Register client script
        ClientScriptManager scriptMgr = Page.ClientScript;
        scriptMgr.RegisterClientScriptBlock(this.GetType(), "SubmitOnClick", script, true);
    }
    
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Parsing a Date and Time Value</title>
</head>
<body>
    <form id="DateForm" runat="server">
    <div>
    <center>
       <asp:Label ID="Label1" runat="server" Text="Enter a Date and Time:" Width="248px"></asp:Label>
       <asp:TextBox ID="DateString" runat="server" Width="176px"></asp:TextBox><br />
    </center>       
    <br />
    <center>
    <asp:Button ID="OKButton" runat="server" Text="Button"  
            OnClientClick="AddDateInformation()" onclick="OKButton_Click" />
    <asp:HiddenField ID="DateInfo"  Value=""  runat="server" />
    </center>
    <br />
    </div>
    </form>
</body>
</html>


<%@ Page Language="VB" %>
<%@ Import  Namespace="System.Globalization" %> 
<%@ Assembly Name="System.Core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Protected Sub OKButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OKButton.Click
        Dim locale As String = ""
        Dim styles As DateTimeStyles = DateTimeStyles.AllowInnerWhite Or DateTimeStyles.AllowLeadingWhite Or _
                                       DateTimeStyles.AllowTrailingWhite
        Dim inputDate, localDate As Date
        Dim localDateOffset As DateTimeOffset
        Dim integerOffset As Integer
        Dim result As Boolean

        ' Exit if input is absent.
        If String.IsNullOrEmpty(Me.DateString.Text) Then Exit Sub

        ' Hide form elements.
        Me.DateForm.Visible = False

        ' Create array of CultureInfo objects
        Dim cultures(Request.UserLanguages.Length) As CultureInfo
        For ctr As Integer = Request.UserLanguages.GetLowerBound(0) To Request.UserLanguages.GetUpperBound(0)
            locale = Request.UserLanguages(ctr)
            If Not String.IsNullOrEmpty(locale) Then
                ' Remove quality specifier, if present.
                If locale.Contains(";") Then _
                   locale = Left(locale, InStr(locale, ";") - 1)
                Try
                   cultures(ctr) = New CultureInfo(Request.UserLanguages(ctr), False)
                Catch
                End Try
            Else
                cultures(ctr) = CultureInfo.CurrentCulture
            End If
        Next
        cultures(Request.UserLanguages.Length) = CultureInfo.InvariantCulture
        ' Parse input using each culture.
        For Each culture As CultureInfo In cultures
            result = Date.TryParse(Me.DateString.Text, culture.DateTimeFormat, styles, inputDate)
            If result Then Exit For
        Next
        ' Display result to user.
        If result Then
            Response.Write("<P />")
            Response.Write("The date you input was " + Server.HtmlEncode(CStr(Me.DateString.Text)) + "<BR />")
        Else
            ' Unhide form.
            Me.DateForm.Visible = True
            Response.Write("<P />")
            Response.Write("Unable to recognize " + Server.HtmlEncode(Me.DateString.Text) + ".<BR />")
        End If

        ' Get date and time information from hidden field.
        Dim dates() As String = Request.Form.Item("DateInfo").Split(";")

        ' Parse local date using each culture.
        For Each culture As CultureInfo In cultures
            result = Date.TryParse(dates(0), culture.DateTimeFormat, styles, localDate)
            If result Then Exit For
        Next
        ' Parse offset 
        result = Integer.TryParse(dates(1), integerOffset)
        ' Instantiate DateTimeOffset object representing user's local time
        If result Then
            Try
                localDateOffset = New DateTimeOffset(localDate, New TimeSpan(0, -integerOffset, 0))
            Catch ex As Exception
                result = False
            End Try
        End If
        ' Display result to user.
        If result Then
            Response.Write("<P />")
            Response.Write("Your local date and time is " + localDateOffset.ToString() + ".<BR />")
            Response.Write("The date and time on the server is " & _
                           TimeZoneInfo.ConvertTime(localDateOffset, _
                                                    TimeZoneInfo.Local).ToString() & ".<BR />")
            Response.Write("Coordinated Universal Time is " + localDateOffset.ToUniversalTime.ToString() + ".<BR />")
        Else
            Response.Write("<P />")
            Response.Write("Unable to recognize " + Server.HtmlEncode(dates(0)) & ".<BR />")
        End If
    End Sub

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
        Dim script As String = "function AddDateInformation() { " & vbCrLf & _
                  "var today = new Date();" & vbCrLf & _
                  "document.DateForm.DateInfo.value = today.toLocaleString() + " & Chr(34) & Chr(59) & Chr(34) & " + today.getTimezoneOffset();" & vbCrLf & _
                  " }"
        ' Register client script
        Dim scriptMgr As ClientScriptManager = Page.ClientScript
        scriptMgr.RegisterClientScriptBlock(Me.GetType(), "SubmitOnClick", script, True)
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Parsing a Date and Time Value</title>
</head>
<body>
    <form id="DateForm" runat="server">
    <div>
    <center>
       <asp:Label ID="Label1" runat="server" Text="Enter a Date and Time:" Width="248px"></asp:Label>
       <asp:TextBox ID="DateString" runat="server" Width="176px"></asp:TextBox><br />
    </center>       
    <br />
    <center>
    <asp:Button ID="OKButton" runat="server" Text="Button"  
            OnClientClick="AddDateInformation()" onclick="OKButton_Click" />
    <asp:HiddenField ID="DateInfo"  Value=""  runat="server" />
    </center>
    <br />
    </div>
    </form>
</body>
</html>

Das clientseitige Skript ruft die JavaScript-Methode toLocaleString auf.The client-side script calls the JavaScript toLocaleString method. Dies erzeugt eine Zeichenfolge, die den Formatierungskonventionen des Gebietsschemas des Benutzers entspricht, das eher erfolgreich auf dem Server analysiert werden kann.This produces a string that follows the formatting conventions of the user's locale, which is more likely to be successfully parsed on the server.

Zum Füllen der HttpRequest.UserLanguages-Eigenschaft kommen die Kulturnamen infrage, die sich in den Accept-Language-Headern befinden, die in einer HTTP-Anforderung enthalten sind.The HttpRequest.UserLanguages property is populated from the culture names that are contained in Accept-Language headers included in an HTTP request. Allerdings sind nicht in den Anforderungen aller Browser Accept-Language-Header enthalten, und die Benutzer können die Header auch vollständig unterdrücken.However, not all browsers include Accept-Language headers in their requests, and users can also suppress the headers completely. Daher ist es wichtig, dass bei der Analyse der Benutzereingabe eine Fallbackkultur verfügbar ist.This makes it important to have a fallback culture when parsing user input. In der Regel ist die Fallbackkultur die von CultureInfo.InvariantCulture zurückgegebene invariante Kultur.Typically the fallback culture is the invariant culture returned by CultureInfo.InvariantCulture. Benutzer können für den Internet Explorer auch Kulturnamen bereitstellen, die sie in ein Textfeld eingeben, was die Gefahr mit sich bringt, dass die Kulturnamen möglicherweise nicht gültig sind.Users can also provide Internet Explorer with culture names that they input in a text box, which creates the possibility that the culture names may not be valid. Daher ist es wichtig, bei der Instanziierung eines CultureInfo-Objekts eine Ausnahmebehandlung zu verwenden.This makes it important to use exception handling when instantiating a CultureInfo object.

Beim Abrufen durch eine vom Internet Explorer übermittelte HTTP-Anforderung wird das HttpRequest.UserLanguages-Array in der durch die Benutzervoreinstellung vorgegebenen Reihenfolge aufgefüllt.When retrieved from an HTTP request submitted by Internet Explorer, the HttpRequest.UserLanguages array is populated in order of user preference. Das erste Element im Array enthält den Namen der primären Kultur/Region des Benutzers.The first element in the array contains the name of the user's primary culture/region. Wenn das Array zusätzliche Elemente enthält, weist der Internet Explorer ihnen nach dem Zufallsprinzip einen Qualitätsspezifizierer zu, der durch ein Semikolon vom Namen der Kultur getrennt wird.If the array contains any additional items, Internet Explorer arbitrarily assigns them a quality specifier, which is delimited from the culture name by a semicolon. Beispielsweise kann ein Eintrag für die Kultur „fr-FR“ das Format fr-FR;q=0.7 aufweisen.For example, an entry for the fr-FR culture might take the form fr-FR;q=0.7.

Im Beispiel wird der CultureInfo-Konstruktor mit seinem auf false festgelegten useUserOverride-Parametersatz zum Erstellen eines neuen CultureInfo-Objekts aufgerufen.The example calls the CultureInfo constructor with its useUserOverride parameter set to false to create a new CultureInfo object. Wenn der Kulturname der Standardkulturname auf dem Server ist, wird dadurch sichergestellt, dass das vom Klassenkonstruktor erstellte neue CultureInfo-Objekt die Standardeinstellungen einer Kultur enthält und keine mit der Anwendung Regions- und Sprachoptionen des Servers überschriebenen Einstellungen widerspiegelt.This ensures that, if the culture name is the default culture name on the server, the new CultureInfo object created by the class constructor contains a culture's default settings and does not reflect any settings overridden by using the server's Regional and Language Options application. Es ist unwahrscheinlich, dass die Werte überschriebener Einstellungen auf dem Server auf dem System des Benutzers vorhanden sind oder in der Eingabe des Benutzers widergespiegelt werden.The values from any overridden settings on the server are unlikely to exist on the user's system or to be reflected in the user's input.

Da in diesem Beispiel zwei Zeichenfolgendarstellungen eines Datums und einer Uhrzeit (eine Eingabe vom Benutzer, die andere im ausgeblendeten Feld gespeichert) analysiert werden, werden die CultureInfo-Objekte definiert, die möglicherweise im voraus erforderlich sind.Because this example parses two string representations of a date and time (one input by the user, the other stored to the hidden field), it defines the possible CultureInfo objects that may be required in advance. Es wird ein Array von CultureInfo-Objekten erstellt, das um eins größer ist als die Anzahl der von der HttpRequest.UserLanguages-Eigenschaft zurückgegebenen Elemente.It creates an array of CultureInfo objects that is one greater than the number of elements returned by the HttpRequest.UserLanguages property. Dann wird für jede Sprachen-/Regionszeichenfolge ein CultureInfo-Objekt instanziiert und darüber hinaus ein CultureInfo-Objekt, das CultureInfo.InvariantCulture darstellt.It then instantiates a CultureInfo object for each language/region string, and also instantiates a CultureInfo object that represents CultureInfo.InvariantCulture.

Ihr Code kann entweder die Parse- oder TryParse-Methode zum Konvertieren der Zeichenfolgendarstellung eines Datums und einer Uhrzeit des Benutzers in einen DateTime-Wert aufrufen.Your code can call either the Parse or the TryParse method to convert the user's string representation of a date and time to a DateTime value. Wiederholte an eine Analysemethode gerichtete Aufrufe können für einen einzelnen Analysevorgang erforderlich sein.Repeated calls to a parse method may be required for a single parsing operation. Daher ist die TryParse-Methode besser, weil sie false zurückgibt, wenn bei einem Analysevorgang ein Fehler auftritt.As a result, the TryParse method is better because it returns false if a parse operation fails. Im Gegensatz dazu kann das Behandeln wiederholter Ausnahmen, die ggf. von der Parse-Methode ausgelöst werden, ein sehr ressourcenintensiver Vorgang in einer Webanwendung sein.In contrast, handling the repeated exceptions that may be thrown by the Parse method can be a very expensive proposition in a Web application.

Kompilieren des CodesCompiling the Code

Um den Code zu kompilieren, erstellen Sie eine ASP.NET-Webseite ohne CodeBehind.To compile the code, create an ASP.NET Web page without a code-behind. Anschließend kopieren Sie das Beispiel in die Webseite, damit es den vorhandenen Code ersetzt.Then copy the example into the Web page so that it replaces all the existing code. Die ASP.NET-Webseite sollte folgende Steuerelemente enthalten:The ASP.NET Web page should contain the following controls:

  • Ein Label-Steuerelement, auf das nicht im Code verwiesen wird.A Label control, which is not referenced in code. Legen Sie seine Text-Eigenschaft auf „Geben Sie eine Zahl ein:“ fest.Set its Text property to "Enter a Number:".

  • Ein TextBox-Steuerelement namens DateString.A TextBox control named DateString.

  • Ein Button-Steuerelement namens OKButton.A Button control named OKButton. Legen Sie seine Text-Eigenschaft auf „OK“ fest.Set its Text property to "OK".

  • Ein HiddenField-Steuerelement namens DateInfo.A HiddenField control named DateInfo.

.NET Framework-Sicherheit.NET Framework Security

Um zu verhindern, dass ein Benutzer ein Skript in den HTML-Stream einfügt, sollte eine Benutzereingabe nie direkt in der Antwort des Servers wiederholt werden.To prevent a user from injecting script into the HTML stream, user input should never be directly echoed back in the server response. Sie sollte stattdessen mithilfe der HttpServerUtility.HtmlEncode-Methode codiert werden.Instead, it should be encoded by using the HttpServerUtility.HtmlEncode method.

Siehe auchSee also