Rozdíl mezi year-of-era a week-based-year

V rámci java.time.format.DateTimeFormatter je možné použít pro formátování roku malá y a velká Y. Špatně zvolené y může znamenat špatně dohledatelnou chybu. Malé y znamená year-of-era, což vytvoří očekávaný výstup, kdy 31.12. bude vždy jako poslední den v daném roce. Velké Y znamená week-based-year, což v případě týdnu, který spadá do více roků, vytvoří neočekávaný výstup. Pokud Silvestr (či pár předchozích dnů) připadnou do týdne, který nemá 31.12. v sobotu, budou dny poslední dny roku z přelomového týdne patřit do následujího roku. Příklad bude nejlepší. Takto to funguje na Linuxu, ale např. na Window byl výstup s velkým Y pro rok 2021 stejný jako pro malé y.

val formatY = DateTimeFormatter.ofPattern("ccc dd.MM.YYYY")
val formaty = DateTimeFormatter.ofPattern("ccc dd.MM.yyyy")

Formatting 2021-12-31
ccc dd.MM.YYYY format Fri 31.12.2022
ccc dd.MM.yyyy format Fri 31.12.2021

Formatting 2020-12-31
ccc dd.MM.YYYY format Thu 31.12.2021
ccc dd.MM.yyyy format Thu 31.12.2020

Formatting 2019-12-31
ccc dd.MM.YYYY format Tue 31.12.2020
ccc dd.MM.yyyy format Tue 31.12.2019

Formatting 2018-12-31
ccc dd.MM.YYYY format Mon 31.12.2019
ccc dd.MM.yyyy format Mon 31.12.2018

Formatting 2017-12-31
ccc dd.MM.YYYY format Sun 31.12.2018
ccc dd.MM.yyyy format Sun 31.12.2017

Formatting 2016-12-31
ccc dd.MM.YYYY format Sat 31.12.2016
ccc dd.MM.yyyy format Sat 31.12.2016

Formatting 2015-12-31
ccc dd.MM.YYYY format Thu 31.12.2016
ccc dd.MM.yyyy format Thu 31.12.2015

Formatting 2014-12-31
ccc dd.MM.YYYY format Wed 31.12.2015
ccc dd.MM.yyyy format Wed 31.12.2014

Formatting 2013-12-31
ccc dd.MM.YYYY format Tue 31.12.2014
ccc dd.MM.yyyy format Tue 31.12.2013

Formatting 2012-12-31
ccc dd.MM.YYYY format Mon 31.12.2013
ccc dd.MM.yyyy format Mon 31.12.2012

Formatting 2011-12-31
ccc dd.MM.YYYY format Sat 31.12.2011
ccc dd.MM.yyyy format Sat 31.12.2011

Formatting 2010-12-31
ccc dd.MM.YYYY format Fri 31.12.2011
ccc dd.MM.yyyy format Fri 31.12.2010

Napsat komentář