Quale data dovresti testare?
Metà del test sulle date è spostare l'orologio. L'altra metà è sapere dove spostarlo. Un calcolatore online ti dirà che giorno sarà tra novanta giorni. Non ti dirà che quel giorno è una festività bancaria, né che è l'ultimo giorno del trimestre.
04/08/2008 incollato, e
entrambe le letture mostrate invece di una indovinata.Giorni lavorativi, con i festivi veri
«Dieci giorni lavorativi dopo» non è aritmetica - dipende dal calendario di quale paese stai contando. Stessa data di partenza, stessi dieci giorni, due risposte diverse:
$ 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
Un giorno di differenza, e il calcolatore ti dirà perché se gli chiedi della data intermedia:
$ 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)
Stati Uniti e Polonia vengono forniti come calendari di riferimento, scelti perché fra i due mettono alla prova ogni tipo di regola esistente: date fisse, l'n-esimo giorno della settimana di un mese, date calcolate a partire dalla Pasqua e la regola americana per cui un festivo che cade di sabato viene osservato il venerdì precedente. Aggiungere un paese è un file di dati, non una modifica del codice.
Tutti i formati insieme
L'applicazione testata vuole la data nella forma che si aspetta. Invece di farti convertire, il calcolatore le stampa tutte - più una maschera personalizzata per quelle che non rientrano in nessuno 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)
Quel valore epoch non è un caso - 2147483647 è esattamente il numero più grande che
un intero con segno a 32 bit può contenere, ed è l'intera ragione per cui quella data conta.
Leggere una data al contrario
L'altra direzione è altrettanto utile: incolla una data presa da un log e scopri che cos'è. Quando
il formato è ambiguo - e 04/08 è ambiguo in mezzo mondo - vengono mostrate
entrambe le letture invece di indovinarne una, perché è dall'indovinare che veniva la
segnalazione di bug originale.
$ 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)
Quattro mesi di distanza, in giorni della settimana diversi. Una data ISO non è ambigua e viene letta come tale, e qualcosa che non è affatto una data viene rifiutato invece di essere indovinato.
Costruita a passi, non da una frase
Un momento è un punto di partenza più dei passi, e il risultato intermedio viene mostrato dopo ciascuno, così un'espressione che dà una risposta sorprendente ti fa vedere dove ha svoltato. Cinque tipi di passo: spostare di un'unità, impostare l'ora del giorno, agganciarsi a un confine di periodo, spostarsi al giorno lavorativo più vicino e riesprimere in un altro fuso orario.
# L'ultimo secondo prima del cambio d'anno chrono calc --base today --snap eoy # Novanta giorni lavorativi dopo, nel calendario bancario americano chrono calc --base today --shift +90bd --calendar us-banking # Diciotto anni e un giorno indietro, per un controllo dell'età chrono calc --base today --shift -18y --shift -1d
Qualsiasi data calcolata passa direttamente in una sessione di sostituzione, e --json
emette lo stesso risultato in forma leggibile da una macchina.
Le date che vale la pena testare →