.net - Lokalisierung von Datumsformat-Deskriptoren

Translate

Was ist der beste Weg, um einen Datumsformat-Deskriptor zu lokalisieren?

Wie jeder aus einer Kultur weiß, die das Format MM / TT / JJJJ nicht verwendet, ist es ärgerlich, Daten in diesem Format eingeben zu müssen. Das .NET-Framework bietet eine sehr gute Lokalisierungsunterstützung, daher ist es trivial, Daten entsprechend der Benutzerkultur zu analysieren. Oft möchten Sie jedoch auch einen hilfreichen Hinweis auf das erforderliche Format anzeigen (insbesondere, um zwischen JJJ und JJJJ zu unterscheiden, das austauschbar ist die meisten Kulturen).

Was ist der beste Weg, um dies auf eine Weise zu tun, die für die meisten Benutzer sinnvoll ist (z. B. TT / M / JJJJ ist aufgrund der Änderung des Falls und des Wechsels zwischen einem und zwei Buchstaben verwirrend).

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Verwenden Sie einfach ISO-8601. Es ist ein internationaler Standard.

Date and time (current at page generation) expressed according to ISO 8601:
Date:                           2014-07-05
Combined date and time in UTC:  2014-07-05T04:00:25+00:00
                                2014-07-05T04:00:25Z
Week:                           2014-W27
Date with week number:          2014-W27-6
Ordinal date:                   2014-186
Quelle
Translate

Ich muss mit den OP 'falschen' Daten übereinstimmen, die wirklich mit meiner TT / MM / JJJJ-Erziehung übereinstimmen, und ich finde es sehr einfach, mit ISO 8601-Daten und -Zeiten zu arbeiten. Ausnahmsweise hat der Standard es richtig gemacht undengtechhat die offensichtliche Antwort, die keine Lokalisierung erfordert.

Ich wollte das Geburtstags-Eingabeformular für den Stapelüberlauf als Fehler melden, da es für die Mehrheit der Welt ein sehr schmerzender Daumen ist.

Quelle
ICR
Translate

Hier ist meine aktuelle Methode. Irgendwelche Vorschläge?

Regex singleMToDoubleRegex = new Regex("(?<!m)m(?!m)");
Regex singleDToDoubleRegex = new Regex("(?<!d)d(?!d)");
CultureInfo currentCulture = CultureInfo.CurrentUICulture;

// If the culture is netural there is no date pattern to use, so use the default.
if (currentCulture.IsNeutralCulture)
{
    currentCulture = CultureInfo.InvariantCulture;
}

// Massage the format into a more general user friendly form.
string shortDatePattern = CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern.ToLower();
shortDatePattern = singleMToDoubleRegex.Replace(shortDatePattern, "mm");
shortDatePattern = singleDToDoubleRegex.Replace(shortDatePattern, "dd");
Quelle
ICR
Translate

Das Problem mit internationalen Standards ist, dass sie so gut wie niemand verwendet. Ich versuche, wo ich kann, aber ich bin gezwungen, fast überall im wirklichen Leben TT / MM / JJJJ zu verwenden, was bedeutet, dass ich so daran gewöhnt bin, dass es immer ein bewusster Prozess ist, ISO-8601 zu verwenden. Für die Mehrheit der Menschen, die nicht einmal versuchen, ISO-8601 zu verwenden, ist es noch schlimmer. Wenn Sie internationalisieren können, wo Sie können, halte ich das für einen großen Vorteil.

Quelle
Translate

Wie wäre es mit der Angabe des Formats (MM / TT / JJJJ oder TT / MM / JJJJ), gefolgt von einem Ausdruck des heutigen Datums in der Benutzerkultur. MSDN hat einen Artikel überFormatieren einer DateTime für die Kultur der PersonVerwenden des CultureInfo-Objekts, das dabei hilfreich sein kann. Eine Kombination des Formats (mit dem die meisten Menschen vertraut sind) mit dem in diesem Format dargestellten aktuellen Datum sollte ein ausreichender Hinweis für die Person sein, wie sie das Datum eingeben soll. (Fügen Sie auch ein Kalendersteuerelement für diejenigen hinzu, die es noch nicht herausfinden können).

Quelle
Translate

Eine Kurzform ist praktisch und hilft, Rechtschreibfehler zu vermeiden. Lokalisieren Sie gegebenenfalls, achten Sie jedoch darauf, das erwartete Format anzuzeigen (lassen Sie den Benutzer nicht blind). Stellen Sie eine Datumsauswahlsteuerung alsOptionalHilfe beim Ausfüllen des Feldes.

Als Extra kann auch das schnelle Parsen und Anzeigen des Datums in Langform hilfreich sein.

Quelle
Translate

Beste Option: Ich würde stattdessen empfehlen, eine Standard-Datumsauswahl zu verwenden.

Alternative: Jedes Mal, wenn sich der Inhalt des Bearbeitungssteuerelements ändert, analysieren Sie es und zeigen (in einem separaten Steuerelement?) das Langformat des Datums an (dh: Eingabe "03/04/09" zeigt "Ihre Eingabe: 4. März 2009" an).

Quelle
Nächster:
Python und MySQL