22 Stimmen

Lokalisierung von Datumsformat-Deskriptoren

Wie lässt sich ein Datumsformatdeskriptor am besten lokalisieren?

Jeder, der aus einer Kultur kommt, in der das Format mm/dd/yyyy nicht verwendet wird, weiß, dass es lästig ist, Daten in diesem Format eingeben zu müssen. Das .NET-Framework bietet eine sehr gute Lokalisierungsunterstützung, so dass es trivial ist, Datumsangaben entsprechend der Kultur des Benutzers zu parsen, aber man möchte oft auch einen hilfreichen Hinweis auf das erforderliche Format anzeigen (insbesondere zur Unterscheidung zwischen yy und yyyy, die in den meisten Kulturen austauschbar sind).

Wie kann man dies am besten so tun, dass es für die meisten Benutzer sinnvoll ist (z. B. ist tt/M/jjj wegen der Groß- und Kleinschreibung und des Wechsels zwischen einem und zwei Buchstaben verwirrend).

7voto

engtech Punkte 2761

Verwenden Sie einfach ISO-8601 . Das 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

4voto

sparkes Punkte 19083

Ich muss dem Berichterstatter zustimmen, dass "falsche" Datumsangaben meiner DD/MM/YYYY-Erziehung widersprechen, und ich finde ISO 8601-Datums- und Zeitangaben extrem einfach zu handhaben. Ausnahmsweise hat es die Norm mal richtig gemacht und engtech hat die offensichtliche Antwort, die keine Lokalisierung erfordert.

Ich wollte das Geburtstags-Eingabeformular auf Stack Overflow als Fehler melden, weil es für die Mehrheit der Welt ein Dorn im Auge ist.

2voto

ICR Punkte 13528

Hier ist meine derzeitige 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");

2voto

ICR Punkte 13528

Das Problem mit internationalen Normen ist, dass so gut wie niemand sie anwendet. Ich versuche es, wo ich kann, aber im wirklichen Leben bin ich gezwungen, fast überall tt/mm/jjjj zu verwenden, was bedeutet, dass ich mich so daran gewöhnt habe, dass es immer ein bewusster Prozess ist, ISO-8601 zu verwenden. Für die meisten Menschen, die nicht einmal versuchen, ISO-8601 zu verwenden, ist es noch schlimmer. Wenn man internationalisieren kann, wo man kann, halte ich das für einen großen Vorteil.

1voto

Yaakov Ellis Punkte 39402

Wie wäre es mit der Angabe des Formats (mm/dd/yyyy oder dd/mm/yyyy), gefolgt von einem Ausdruck des heutigen Datums in der Kultur des Benutzers. MSDN hat einen Artikel über Formatierung einer DateTime für die Kultur der Person mit Hilfe des CultureInfo-Objekts, das dabei hilfreich sein könnte. Eine Kombination aus dem Format (mit dem die meisten Menschen vertraut sind) und dem aktuellen Datum, das in diesem Format dargestellt wird, sollte für die Person ein ausreichender Anhaltspunkt sein, wie sie das Datum eingeben sollte. (Fügen Sie auch ein Kalender-Steuerelement für diejenigen ein, die es immer noch nicht herausfinden können).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X