Ce dată ar trebui să testezi?
O jumătate din testarea cu date înseamnă mutarea ceasului. Cealaltă jumătate înseamnă să știi unde să-l muți. Un calculator online îți spune cât face nouăzeci de zile de azi încolo. Nu îți spune că răspunsul este o sărbătoare bancară sau că este ultima zi a trimestrului.
04/08/2008 lipit, și
ambele citiri afișate, nu una singură ghicită.Zile lucrătoare, cu sărbători reale
„Zece zile lucrătoare de acum” nu este aritmetică - depinde de calendarul cărei țări îl numeri. Aceeași dată de început, aceleași zece zile, două răspunsuri diferite:
$ 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
O zi diferență, iar calculatorul îți spune de ce dacă îl întrebi despre data din mijloc:
$ 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)
Statele Unite și Polonia vin ca calendare de referință, alese pentru că împreună exersează fiecare tip de regulă existent: date fixe, a n-a zi a săptămânii din lună, date calculate din Paște și regula americană după care o sărbătoare căzută într-o sâmbătă este respectată în vinerea precedentă. Adăugarea unei țări înseamnă un fișier de date, nu o modificare de cod.
Toate formatele deodată
Aplicația testată vrea data în forma pe care o așteaptă. În loc să te pună să convertești, calculatorul le afișează pe toate - plus o mască personalizată pentru cele care nu se potrivesc cu nimic standard.
$ 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)
Valoarea epoch nu este o coincidență - 2147483647 este exact cel mai mare număr pe
care îl poate stoca un întreg cu semn pe 32 de biți, ceea ce este întregul motiv pentru care data
contează.
Citirea unei date în sens invers
Direcția opusă este la fel de utilă: lipești o dată dintr-un jurnal și afli ce este. Când formatul
este ambiguu - iar 04/08 este ambiguu în jumătate din lume - sunt afișate
ambele citiri, în loc să fie ghicită una, pentru că din ghicit a pornit raportul de bug
inițial.
$ 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)
La patru luni distanță, în zile diferite ale săptămânii. O dată ISO este neambiguă și este citită ca atare, iar ceva care nu este deloc o dată este refuzat, nu ghicit.
Construit din pași, nu dintr-o propoziție
Un moment este un punct de pornire plus pași, iar rezultatul intermediar este afișat după fiecare, așa că o expresie care produce un răspuns surprinzător îți arată unde a luat-o razna. Cinci tipuri de pași: deplasare cu o unitate, setarea orei din zi, sărirea la o limită de perioadă, mutarea la cea mai apropiată zi lucrătoare și reexprimarea într-un alt fus orar.
# Ultima secundă înainte să se încheie anul chrono calc --base today --snap eoy # Nouăzeci de zile lucrătoare de acum, în calendarul bancar american chrono calc --base today --shift +90bd --calendar us-banking # Optsprezece ani și o zi în urmă, pentru o verificare de vârstă chrono calc --base today --shift -18y --shift -1d
Orice dată calculată merge direct într-o sesiune de înlocuire, iar
--json emite același rezultat în formă pentru mașini.
Datele care merită testate →