Nowa era w japońskim kalendarzu (Linux)

Nowa era w japońskim kalendarzu

1 maja 2019 roku rozpoczyna się nowa era w kalendarzu japońskim. Fedora jest już gotowa na tę zmianę.

O co chodzi

1 grudnia 2017 roku cesarz Japonii Akihito zapowiedział oficjalnie, że 30 kwietnia 2019 roku abdykuje. Od 1 maja na tronie będzie zasiadał jego następca Naruhito, co jednocześnie rozpocznie nową erę według kalendarza japońskiego. Jest to dość niezwykła sytuacja, bo do tej pory cesarze panowali do śmierci. Oczywiście, moment zmiany ery był z tego powodu trudny do przewidzenia. Decyzja cesarza pozwoli państwu na przygotowanie się do tej zmiany.

W Japonii wprawdzie znany i używany jest kalendarz gregoriański (taki sam, jak w Polsce), ale oprócz tego jest używany tradycyjny kalendarz japoński, w którym kolejne lata są liczone od wstąpienia na tron cesarza. Okres panowania każdego z nich nazywany jest erą, z których każda ma swoją nazwę. Na przykład, bieżąca era nazywa się Heisei (平成), w chwili pisania tego tekstu mamy 31 rok ery Heisei.

1 kwietnia, na miesiąc przed rozpoczęciem nowej ery, została ogłoszona jej nazwa. Już dzisiaj wiemy, że będzie się nazywała Reiwa (令和). Dzięki temu można dostosować komputery i inne urządzenia automatycznie wyświetlające datę.

Jak przetestować

Formatowaniem dat w systemach uniksowych zajmuje się funkcja strftime(), najprościej będzie nam sprawdzić jej działanie posługując się poleceniem date. Jeśli uruchomimy to polecenie na terminalu, wyświetli ono bieżącą datę i czas w naszym własnym języku, w domyślnym formacie:

Zmiana dotyczy kalendarza japońskiego, który jest dostępny tylko jeśli używamy japońskich ustawień językowych:

Nadal nie widzimy nic ciekawego, bo domyślny format daty w języku japońskim wyświetla kalendarz gregoriański. Musimy więc użyć własnego formatu daty:

I tu już mamy coś ciekawego: wyświetlił nam się 31 rok ery Heisei.

Na razie jednak mamy kwiecień, starą erę japońską. Co zrobić, aby wyświetlić datę z nowej ery? Posłużmy się takimi poleceniami, które wyświetlą nam datę, która będzie za miesiąc:

Jeśli tu nadal widzimy rok 31 ery Heisei, to jest to błąd. W zaktualizowanym systemie powinno być:

Dlaczego polecenie LC_ALL=ja_JP.utf8 date +%EY -d "1 month" nie wyświetliło żadnej liczby? Pierwszy rok nowej ery zwykle nie jest zapisywany liczbą 1, ale opisywany słowem gannen (元年), czyli „pierwszy rok”.

Objaśnienia

Wyjaśnijmy co oznaczają tajemnicze symbole, na przykład +%Ec. Znak "+" oznacza, że podany po nim napis jest formatem daty, którego polecenie date ma użyć. Znak "%" oznacza początek formatu, znak "E" oznacza użycie alternatywnego kalendarza. Przyjrzyjmy się dokładnie jakich formatów użyliśmy do testowania:

%EC nazwa ery (np. Heisei, Reiwa)
%EY numer roku wraz z nazwą ery
%Ey numer roku w kalendarzu japońskim, bez nazwy ery
%Ec pełna data i czas w kalendarzu japońskim
%Ex pełna data (bez czasu) w kalendarzu japońskim

Dla porównania:

%C numer wieku pomniejszony o 1, czyli początkowe cyfry roku (obecnie 20 — tak, nie 21)
%Y rok w kalendarzu gregoriańskim (2019)
%y rok, ale skrócony do 2 cyfr (19)
%c pełna data i czas
%x pełna data (bez czasu)

Warto zwrócić uwagę, że znak "E" w ustawieniach polskich nie da żadnego efektu, zostanie zignorowany.

Przełącznik -d oznacza, że date ma wyświetlić inną datę, niż bieżącą, np. -d "1 month" oznacza, że chcemy wyświetlić datę za miesiąc, licząc od teraz.

Jak zaktualizować

Aby kalendarz uwzględniał nową japońską erę, musimy mieć zainstalowaną bibliotekę glibc w wersji co najmniej:

Fedora 28 glibc-2.27-38
Fedora 29 glibc-2.28-27
Fedora 30 glibc-2.29-9
Fedora Rawhide glibc-2.29.9000-10
RHEL 7/CentOS 7 glibc-2.17-260.el7_6.4

Fedora Rawhide jest podstawą do przyszłego wydania Fedory 31 (listopad 2019), ale zanim to nastąpi, będzie dostępna wersja glibc 2.30, która od początku będzie obsługiwała nową erę japońską.