Date

Datum a čas, tedy přesněji: určitý okamžik v čase s přesností na milisekundy.

Hodnota typu java.util.Date.

Získání data v TFS

Pro vytvoření data v šabloně slouží funkce asDate.

Datum je také hodnotou některých atributů assetů: běžné jsou articleDate, validFrom, validTo, createDate a modifyDate.

Výpis data

Přímý výpis data používá pro češtinu pattern "d.M.yyyy".

POZOR na velikost písmen! např. D.m.YYYY by vypsal "pořadí dne v roce". "minuta". "týdenní rok"

Příklad: Defaultní výpis data
Vstup
{asDate()}
Výstup
18.6.2009

Pro ostatní jazyky se snaží zvolit defaultní formát automaticky (formát velikosti MEDIUM pro dané locale voláním metody getInstance třídy DateFormat).

Příklad: Defaultní výpis data v angličtině
Vstup
{options forceLanguage="en"}
 {asDate()}
{/options}
Výstup
Jun 18, 2009

Skutečný výpis může tedy pro jiné jazyky než češtinu pravděpodobně záviset na verzi javy a nastavení serveru; pokud klient trvá na zachování konkrétního výpisu, je lepší s ohledem na dopřednou kompatibilitu uvést formát explicitně.

Pattern je možné změnit uvedením parametru výpisu pattern. K formátování se používá SimpleDateFormat – v jeho dokumentaci je popsaný význam jednotlivých znaků patternu.

Příklad: Vlastní pattern pro výpis data
Vstup
{asDate() pattern="d. MMMM yyyy 'v' H:mm"}
Výstup
18. červen 2009 v 9:07

V novějších verzích systému jNetPublish je možné pomocí příkazu options nastavit locale, kterým se bude řídit výpis slovně reprezentovaných částí data (měsíce, dny v týdnu). Defaultně se bere locale podle aktuálního jazyka.

Příklad: Vlastní pattern pro volbu jazyka, explicitně vyžádané locale
Vstup
{options forceLanguage="en"}
 {_template.modifyDate pattern="MMMM d, yyyy"}
{/options}
Výstup
June 18, 2009

Pokud je třeba s formátovanou reprezentací data dále pracovat jako s řetězcem, lze použít funkci format.

Selekce podhodnoty

Používá Calendar k získání různých složek data.

date
(Integer) Den v měsíci podle obvyklého číslování. Tzn. hodnota 12 pro 12. ledna nebo 12. února atd.
dayOfMonth
(Integer) Den v měsíci (shodně s předchozím).
day
(Integer) Den v týdnu. Týden začíná nedělí, která má číslo 1, tzn. pondělí je hodnota 2 atd.; sobota je hodnota 7.
dayOfWeek
(Integer) Den v týdnu (shodně s předchozím).
dayOfYear
(Integer) Den v roce – pořadové číslo dne v roce, číslování od jedné. Tzn. hodnota 1 pro 1. ledna, hodnota 32 pro 1. února atd.
month
(Integer) Měsíc – pořadové číslo měsíce v roce, číslování od nuly. Tzn. hodnota 0 pro leden, hodnota 1 pro únor atd.
year
(Integer) Rok v obvyklém číslování.
hours
(Integer) Hodiny v daném dni, to znamená číslo od 0 do 23.
minutes
(Integer) Minuty v dané hodině, tzn. číslo od 0 do 59.
seconds
(Integer) Sekundy v dané minutě, tzn. číslo od 0 do 59.
time
(Long) Počet milisekund od 1.1. 1970
instant
(Instant) Instant reprezentace
Příklad: Podhodnoty data
Vstup
{let d := asDate("12.1.2009 10:09:56", "d.M.yyyy hh:mm:ss")
                  /* 12.1.2009 bylo pondeli */}

date:       {d.date}
dayOfMonth: {d.dayOfMonth}
day:        {d.day}
dayOfWeek:  {d.dayOfWeek}
dayOfYear:  {d.dayOfYear}
month:      {d.month}
year:       {d.year}
hours:      {d.hours}
minutes:    {d.minutes}
seconds:    {d.seconds}
Výstup
 
 
date:       12
dayOfMonth: 12
day:        2
dayOfWeek:  2
dayOfYear:  12
month:      0
year:       2009
hours:      10
minutes:    9
seconds:    56

Pochopitelně nemá smysl k výpisu data používat skládání a lokalizaci těchto podhodnot – k tomu slouží přímý výpis s parametrem pattern. Pokud chceme získat lokalizovanou reprezentaci data jako řetězec, je třeba použít funkci format.

Tentýž postup je vhodné použít i v případě, že chceme pracovat s jedinou komponentou data v lokalizované podobě.

Příklad: Získání lokalizovaného názvu měsíce pro další zpracování
Vstup
{options forceLanguage="en"}
{let currentMonth := format(asDate(), "MMMM")}
{/options}

{toLowerCase(currentMonth)}
Výstup
june

Použití komponent data má smysl v různých podmíněných výrazech.

Příklad: Test aktuálního dne v týdnu
Vstup
{if asDate().day == 2}Už zase pondělí...{/if}

Speciální význam má klíč time:

time
(Long) Počet milisekund od 1.1.1970 GMT reprezentovaný objektem.

Je možné (a vhodné) ho používat jako timestamp v případech, kdy nezáleží na formátu výpisu.

Příklad: Připojení data poslední aktualizace assetu k URL
Vstup
<a href="{link(a) updated=a.modifyDate.time}">...</a>

Mapování

Probíhá stejně jako selekce.

Sekvenční zpracování

Chová se jako prázdná sekvence.

Převod na logickou hodnotu

Vyhodnotí se vždycky jako true.

Pro vložení příspěvku do diskuse se přihlašte.