Welke datum moet je testen?
De helft van datumtesten is de klok verplaatsen. De andere helft is weten waarheen. Een online calculator vertelt je welke dag het over negentig dagen is. Hij vertelt je niet dat die dag een bankfeestdag is, of de laatste dag van het kwartaal.
04/08/2008 geplakt, en beide
lezingen getoond in plaats van er een te raden.Werkdagen, met echte feestdagen
“Tien werkdagen verder” is geen rekenwerk - het hangt ervan af welke kalender van welk land je telt. Dezelfde startdatum, dezelfde tien dagen, twee verschillende antwoorden:
$ 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
Een dag verschil, en de calculator vertelt je waarom als je hem naar de datum ertussen vraagt:
$ 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)
De Verenigde Staten en Polen worden meegeleverd als referentiekalenders, gekozen omdat ze samen elk bestaand regeltype oefenen: vaste datums, de n-de weekdag van een maand, datums berekend vanaf Pasen, en de Amerikaanse regel waarbij een feestdag die op zaterdag valt op de voorgaande vrijdag wordt geviereerd. Een land toevoegen is een gegevensbestand, geen codewijziging.
Alle formaten tegelijk
De geteste applicatie wil de datum in de vorm die ze verwacht. In plaats van jou te laten omrekenen, drukt de calculator ze allemaal af - en een eigen masker voor die welke in geen enkele standaard passen.
$ 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)
Die epochwaarde is geen toeval - 2147483647 is precies het grootste getal dat een
32-bits geheel getal met teken kan bevatten, en dat is de hele reden waarom de datum ertoe doet.
Een datum achterstevoren lezen
De andere richting is even nuttig: plak een datum uit een logboek en ontdek wat het is. Als het
formaat dubbelzinnig is - en 04/08 is dat in de halve wereld - worden
beide lezingen getoond in plaats van er een te raden, want uit raden kwam het
oorspronkelijke bugrapport.
$ 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)
Vier maanden uit elkaar, op verschillende weekdagen. Een ISO-datum is ondubbelzinnig en wordt als zodanig gelezen, en iets wat helemaal geen datum is, wordt geweigerd in plaats van geraden.
Opgebouwd uit stappen, niet uit een zin
Een moment is een beginpunt plus stappen, en het tussenresultaat wordt na elke stap getoond, zodat een expressie die een verrassend antwoord geeft laat zien waar ze afsloeg. Vijf soorten stappen: verschuiven met een eenheid, het tijdstip van de dag instellen, aansluiten op een periodegrens, naar de dichtstbijzijnde werkdag gaan en opnieuw uitdrukken in een andere tijdzone.
# De laatste seconde voordat een jaar omslaat chrono calc --base today --snap eoy # Negentig werkdagen verder, in de Amerikaanse bankkalender chrono calc --base today --shift +90bd --calendar us-banking # Achttien jaar en een dag terug, voor een leeftijdscontrole chrono calc --base today --shift -18y --shift -1d
Elke berekende datum gaat rechtstreeks in een vervangingssessie, en --json geeft
hetzelfde resultaat in machinevorm.
De datums die het testen waard zijn →