Formatowanie dat i godzin

Flash Player 10.1 i nowsze wersje, Adobe AIR 2.0 i nowsze wersje

Format wyświetlania wartości daty i godziny również zależy od regionu. Poniższy przykład przedstawia, jak godzina 13:01, drugiego dnia stycznia 1962 roku może zostać wyświetlona w skrócie dla określonych ustawień narodowych:

Ustawienia regionalne

Format daty i godziny

en-US (angielski, USA)

1/2/62 1:01pm

fr-FR (francuski, Francja)

2/1/62 13:01

ja-JP (japoński, Japonia)

1962/2/1 13:01

Korzystanie z klasy DateTimeFormatter

Klasa DateTimeFormatter służy do formatowania wartości obiektów Date na ciągi daty i godziny zgodne z konwencjami obowiązującymi w danym regionie.

Formatowanie odbywa się zgodnie z ciągiem wzorca, który zawiera sekwencje liter do zastąpienia przez wartości daty i godziny. Na przykład: we wzorcu „rrrr/MM” znaki „rrrr” zostaną zastąpione czterocyfrową wartością roku, po której pojawi się znak „/” i dwucyfrowe oznaczenie miesiąca.

Ciąg wzorca może zostać jawnie ustawiony za pomocą metody setDateTimePattern(). Najlepiej jednak pozwolić na automatyczne ustawienie wzorca zgodnie z ustawieniami narodowymi użytkownika i preferencjami wybranymi w systemie operacyjnym. Ułatwi to automatyczne dostosowanie wyniku do specyfiki kulturowej.

Klasa DateTimeFormatter umożliwia przedstawienie dat i godzin w trzech standardowych stylach (LONG, MEDIUM oraz SHORT), a także może również wykorzystywać wzorzec CUSTOM. Jeden styl można zastosować względem daty, a drugi względem godziny. Rzeczywiste wzorce używane dla każdego ze stylów mogą różnić się nieco w zależności od systemu operacyjnego.

Style można określić podczas tworzenia obiektu DateTimeFormatter. Jeżeli parametry stylu nie są określone, zostaną wówczas domyślnie ustawione na wartość DateTimeStyle.LONG. Później można zmieniać style za pomocą metody setDateTimeStyles(), co zaprezentowano poniżej:

var date:Date = new Date(2009, 2, 27, 13, 1); 
var dtf:DateTimeFormatter = new DateTimeFormatter("en-US", 
    DateTimeStyle.LONG, DateTimeStyle.LONG); 
 
var longDate:String = dtf.format(date); 
trace(longDate); // March 27, 2009 1:01:00 PM 
 
dtf.setDateTimeStyles(DateTimeStyle.SHORT, DateTimeStyle.SHORT); 
var shortDate:String = dtf.format(date); 
trace(shortDate); // 3/27/09 1:01 PM

Lokalizowanie nazw miesięcy i dni

W wielu aplikacjach wykorzystywane są listy nazw miesięcy i dni tygodnia do wyświetlania kalendarza lub list rozwijanych.

Zlokalizowaną listę nazw miesięcy można pobrać za pomocą metody DateTimeFormatter.getMonthNames(). W zależności od systemu operacyjnego dostępne mogą być pełne lub skrótowe formy. Aby uzyskać pełne nazwy miesięcy, należy wprowadzić wartość DateTimeNameStyle.FULL. Natomiast by uzyskać skrócone wersje, należy wprowadzić wartości DateTimeNameStyle.LONG_ABBREVIATION (dłuższy skrót) lub DateTimeNameStyle.SHORT_ABBREVIATION (krótszy).

W niektórych językach nazwa miesiąca zostaje zmieniona (na formę dopełniacza), gdy występuje obok wartości dnia w formacie daty. Jeżeli pożądane jest użycie tylko samych nazw miesiąca, należy przekazać wartość DateTimeNameContext.STANDALONE do metody getMonthNames(). Aby jednak w sformatowanych datach używać nazw miesięcy, należy przekazać wartość DateTimeNameContext.FORMAT.

var dtf:DateTimeFormatter = new DateTimeFormatter("fr-FR"); 
var months:Vector.<String> = dtf.getMonthNames(DateTimeNameStyle.FULL, 
        DateTimeNameContext.STANDALONE); 
trace(months[0]); // janvier 
months = dtf.getMonthNames(DateTimeNameStyle.SHORT_ABBREVIATION, 
         DateTimeNameContext.STANDALONE); 
trace(months[0]); // janv.

Metoda DateTimeFormatter.getWeekdayNames() udostępnia zlokalizowaną listę nazw dni tygodnia. Te same parametry context i nameStyle, które były przyjmowane przez metodę getMonthNames(), są przyjmowane przez metodę getWeekdayNames().

var dtf:DateTimeFormatter = new DateTimeFormatter("fr-FR"); 
var weekdays:Vector.<String> = dtf.getWeekdayNames(DateTimeNameStyle.FULL, 
           DateTimeNameContext.STANDALONE); 
trace(weekdays[0]); // dimanche 
weekdays = dtf.getWeekdayNames(DateTimeNameStyle.LONG_ABBREVIATION, 
           DateTimeNameContext.STANDALONE); 
trace(weekdays[0]); // dim.

Ponadto metoda getFirstWeekday() zwraca wartość indeksu dnia, który tradycyjnie oznacza początek tygodnia w wybranym regionie.