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í.
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í →