Datumformat

Fråga

Hur förbereder jag mina webbsidor för att visa datum i olika internationella datumformat?

Webbplatsbesökare som kommer från olika lokaler kan förvirras av hur datum beskrivs. (Översättarens anmärkning: det svenska termen lokal används här som översättning av den engelska locale.) En lokal definierar användarens preferenser för användning av språk, datum, tid, valutor, mått, sortering, etc.) Formatet MM/DD/YY är specifikt för USA. I största delen av Europa används DD/MM/YY. I Japan används YY/MM/DD. De skiljetecken som används kan vara snedstreck, bindestreck eller punkt. I några lokaler används inledande nolla, i andra gör man inte så. Om en användare som kommer från Japan ser en amerikansk engelskspråkig webbsida, som hämtats från en webbplats i Tyskland, och som visar datum 03/04/02, hur tolkar då användaren detta datum?

Svar

Din första tanke kan vara att detta problem tas om hand genom lokalisering av webbsidan – dvs att översättaren ser till att det blir rätt. Motstå denna frestelse. Vill du verkligen hantera olika kopior av dokumentet för USA och för Storbritannien, som bara skiljer sig åt vad gäller datumformat? Du måste ändå kunna hantera flerspråkiga användare, som illustrerades i vårt exempel ovan.

Du har tre alternativ att välja mellan, där var och en har såväl fördelar som nackdelar:

  1. Använd ett lokalneutralt format
  2. Gör år och månad entydiga
  3. Använd HTTP-huvudet "Accept-Language"

Alternativ ett: Använd ett lokalneutralt format

ISO 8601 specificerar formatet YYYY-MM-DD. 2003-04-02 är tydligare än 03/04/02. (Vissa föredrar att anpassa ISO 8601 genom att använda en förkortning av månadsnamnet så att månaden blir tydligare, t.ex. 2003-Apr-02, men då är det inte längre lokalneutralt.)

Fördelar:

Nackdelar:

Alternativ två: Gör år och månad entydiga

För att uppnå detta så kan du använda månadens namn (förkortat eller ej), och använda fyra siffror för alla Gregorianska årtal. Exempelvis, 2 april 2003.

Fördelar:

Nackdelar:

Alternativ tre: Använd HTTP-huvudet "Accept-Language"

HTTP-huvudet "Accept-Language" anger egentligen bara användarens preferenser för språk, men används ofta för att bestämma lokalpreferenser.

Denna metod fungerar bra för dynamiskt skapade webbdokument, där datum hämtas från någon serverdatabas och läggs in i en webbsida, så länge som användarens förväntningar om datumformat är tydliga. Om det är lämpligt eller ej beror snarare på det språkliga kontextet än på inställningarna i användarens webbläsare. Till exempel:

Hur detta kan åstadkommas beror på din utvecklingsmiljö. Här är några pekare för vanliga utvecklingsmiljöer.

Java/JSP

Anropa metoden getLocale i objekten ServletRequest eller HttpServletRequest. Använd det resulterande objektet Locale för att anropa DateFormat. Observera att formatet SHORT enbart använder siffror. Om du vill ha ett otvetydigt format, använd då formatet LONG. I några lokaler ger även formatet LONG enbart siffror.

Se även ICU4J eftersom den innehåller mer aktualiserad data (och mer funktionalitet) än JDK-rutinerna.

ASP

Använd Request.ServerVariables('HTTP_ACCEPT_LANGUAGE') för att få tag på användarens preferenser. Parsa den första lokalen i listan av acceptabla lokaler. Du måste själv hantera avbildningen från alfabetisk lokalkod till numerisk lokalidentifierare ("Locale Identifier"). Sätt Session.LCID till det returnerade värdet. Anropa FormatDateTime för att formatera datum.

Använd vbLongDate för att undvika tvetydighet.

Perl

Använd $ENV{'HTTP_ACCEPT_LANGUAGE'} för att få tag på det språk som användaren föredrar. Använd POSIX:strftime för att formatera datumvärdet. Du måste själv hantera avbildningen av koden för språk till formatsträng för datum.

Sammanfattning

Det finns ingen perfekt lösning för detta problem. Utvärdera alternativen och välj det som bäst svarar mot dina preferenser och aktuellt sammanhang.

Om det är möjligt att användaren kan bli tveksam om hur visade datum skall förstås, så är det vanligen bäst att använda explicit månadsnamn och fyrsiffriga årtal för gregorianska datum, eller ange åtminstone i sidan hur datum skall förstås.

Datum kan omformateras med dynamiska metoder för att passa till sidans språkliga sammanhang.

Nyttig information

Några har förespråkat att man ska skapa en <date>-tagg, som skulle visa datum i enlighet med den lokal som är angiven i webbläsaren. Detta skulle ge samma svårigheter som beskrevs för dynamiskt genererade datum med det japanska exemplet ovan. Det mest lämpliga formatet beror vanligen på sidans språkliga sammanhang, och inte på det verktyg som användaren använder.