Chrono Mock
JazykČeština

Které datum byste měli testovat?

Polovina testování dat je posunout hodiny. Druhá polovina je vědět, kam je posunout. Online kalkulačka vám řekne, kolik je devadesát dní od dneška. Neřekne vám, že výsledek je bankovní svátek, nebo že je to poslední den čtvrtletí.

Kalkulačka Chrono Mock. Vlevo je seznam scénářů s vyhledáváním a jejich vysvětlením, uprostřed je skládání data a sloupec výsledků vpravo uvádí každý formát s tlačítkem pro kopírování u každého a pod nimi Use this date. Pod skládáním je vložené datum 04/08/2008 ohlášeno jako nejednoznačné s ukázaným americkým i polským čtením.
Pod skládáním je opačný směr: vložené 04/08/2008 a ukázaná obě čtení, místo aby se jedno hádalo.

Pracovní dny se skutečnými svátky

„Deset pracovních dnů odsud“ není aritmetika - záleží na tom, podle kalendáře které země počítáte. Stejné počáteční datum, stejných deset dní, dvě různé odpovědi:

$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar us-banking
  result:  2027-09-16T00:00:00

$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar pl
  result:  2027-09-15T00:00:00

Rozdíl o jeden den a kalkulačka vám řekne proč, když se zeptáte na datum mezi nimi:

$ chrono calc --base 2027-09-06T00:00:00 --calendar us-banking
  metadata:
    weekday       Monday
    business day  no  (us-banking)
    holiday       Labor Day
  what this date lands on:
    public holiday
    (weekend and holiday marks follow the us-banking calendar)

Spojené státy a Polsko jsou dodávány jako referenční kalendáře, vybrané proto, že spolu procvičí každý existující typ pravidla: pevná data, n-tý den v týdnu v měsíci, data počítaná od Velikonoc a americké pravidlo, kdy se svátek připadající na sobotu slaví v předchozí pátek. Přidání země je datový soubor, ne změna kódu.

Všechny formáty najednou

Testovaná aplikace chce datum v takové podobě, jakou očekává. Místo toho, abyste převáděli, kalkulačka vypíše všechny - a vlastní masku pro ty, které nezapadají do žádného standardu.

$ chrono calc --preset year-2038 --zone +00:00
Chrono Mock - date calculator
  preset:   year-2038 - 2038 boundary
  explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)?
  result:  2038-01-19T03:14:07
  formats:
    ISO date      2038-01-19
    ISO datetime  2038-01-19T03:14:07+00:00
    US            01/19/2038
    PL            19.01.2038
    epoch (s)     2147483647
    epoch (ms)    2147483647000
    FILETIME      137919572470000000
    RFC 1123      Tue, 19 Jan 2038 03:14:07 GMT
  ...
  what this date lands on:
    at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)

Ta hodnota epochy není náhoda - 2147483647 je přesně největší číslo, které se vejde do 32bitového celého čísla se znaménkem, a to je celý důvod, proč na tomto datu záleží.

Čtení data pozpátku

Opačný směr je stejně užitečný: vložíte datum z logu a zjistíte, co to je. Když je formát nejednoznačný - a 04/08 je nejednoznačné v polovině světa - ukážou se obě čtení, místo aby se jedno hádalo, protože právě z hádání pocházelo původní hlášení chyby.

$ chrono calc --analyze 04/08/2027
Chrono Mock - date analysis
  input:   04/08/2027  (ambiguous - month/day order differs by locale)
  US MM/DD/YYYY:  2027-04-08  (Thursday)
  PL DD/MM/YYYY:  2027-08-04  (Wednesday)

Čtyři měsíce od sebe, v jiných dnech v týdnu. Datum ISO je jednoznačné a čte se jako takové a něco, co vůbec není datum, se odmítne, ne uhodne.

Složené z kroků, ne z věty

Okamžik je výchozí bod plus kroky a mezivýsledek se ukáže po každém z nich, takže výraz, který dá překvapivou odpověď, ukáže, kde se zlomil. Pět druhů kroků: posun o jednotku, nastavení času dne, skok na hranici období, přesun na nejbližší pracovní den a přepsání do jiného časového pásma.

# Poslední vteřina před přechodem roku
chrono calc --base today --snap eoy

# Devadesát pracovních dnů odsud, v americkém bankovním kalendáři
chrono calc --base today --shift +90bd --calendar us-banking

# Osmnáct let a den zpět, pro kontrolu věku
chrono calc --base today --shift -18y --shift -1d

Jakékoli vypočtené datum jde rovnou do sezení s náhradou času a --json vypíše tentýž výsledek ve strojové podobě. Data, která stojí za testování →

Vyzkoušejte