Którą datę testować?
Połowa testowania dat to przesunięcie zegara. Druga połowa to wiedza, dokąd go przesunąć. Kalkulator online powie ci, co wypada dziewięćdziesiąt dni od dziś. Nie powie, że ta odpowiedź to dzień wolny od pracy w banku ani że to ostatni dzień kwartału.
04/08/2008 i obie
interpretacje pokazane, zamiast zgadnięcia jednej.Dni robocze, z prawdziwymi świętami
„Dziesięć dni roboczych" to nie arytmetyka - zależy od tego, w czyim kalendarzu liczysz. Ta sama data początkowa, ta sama liczba dni, dwie różne odpowiedzi:
$ 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
Jeden dzień różnicy - a kalkulator powie dlaczego, jeśli zapytasz go o datę leżącą pomiędzy:
$ 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 tests: public holiday
Stany Zjednoczone i Polska są dostarczane jako kalendarze referencyjne, wybrane dlatego, że wspólnie ćwiczą każdy istniejący typ reguły: daty stałe, n-ty dzień tygodnia w miesiącu, daty liczone od Wielkanocy oraz amerykańską regułę, w której święto wypadające w sobotę obchodzi się w poprzedzający piątek. Dodanie kraju to plik z danymi, nie zmiana kodu.
Wszystkie formaty naraz
Testowana aplikacja chce daty w takiej postaci, jakiej akurat oczekuje. Zamiast kazać ci konwertować, kalkulator wypisuje wszystkie - plus własną maskę na te, które nie pasują do niczego standardowego.
$ 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 tests: at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)
Ta wartość epoki to nie przypadek - 2147483647 to dokładnie największa
liczba mieszcząca się w 32-bitowej liczbie ze znakiem, czyli cały powód, dla którego ta
data ma znaczenie.
Czytanie daty wstecz
Drugi kierunek jest równie użyteczny: wklej datę z loga i dowiedz się, co to jest. Gdy
format jest niejednoznaczny - a 04/08 jest niejednoznaczny w połowie
świata - pokazywane są obie interpretacje, zamiast zgadywania jednej,
bo od zgadywania zaczęło się pierwotne zgłoszenie błędu.
$ 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)
Cztery miesiące różnicy i inne dni tygodnia. Data w ISO jest jednoznaczna i tak jest czytana, a coś, co w ogóle nie jest datą, zostaje odrzucone, a nie zgadnięte.
Budowane z kroków, nie ze zdania
Moment to punkt wyjścia plus kroki, a wynik pośredni jest pokazywany po każdym z nich, więc wyrażenie dające zaskakującą odpowiedź pokazuje, w którym miejscu skręciło. Pięć rodzajów kroku: przesunięcie o jednostkę, ustawienie godziny, przyciągnięcie do granicy okresu, przejście do najbliższego dnia roboczego i wyrażenie w innej strefie czasowej.
# Ostatnia sekunda przed przełomem roku chrono calc --base today --snap eoy # Dziewięćdziesiąt dni roboczych w amerykańskim kalendarzu bankowym chrono calc --base today --shift +90bd --calendar us-banking # Osiemnaście lat i jeden dzień wstecz, do sprawdzenia wieku chrono calc --base today --shift -18y --shift -1d
Każda policzona data trafia wprost do sesji podmiany, a --json wypisuje
ten sam wynik w formie maszynowej.
Daty warte testowania →