Яку дату варто протестувати?
Половина тестування дат — зсунути годинник. Друга половина — знати, куди його зсувати. Онлайн-калькулятор скаже, яке число буде за дев’яносто днів від сьогодні. Він не скаже, що це банківський вихідний або останній день кварталу.
04/08/2008, і показано
обидва прочитання, а не одне вгадане.Робочі дні зі справжніми святами
«Через десять робочих днів» — це не арифметика: усе залежить від того, за календарем якої країни ви рахуєте. Та сама початкова дата, ті самі десять днів, дві різні відповіді:
$ 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
Різниця в один день, і калькулятор пояснить чому, якщо запитати його про дату посередині:
$ 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)
Сполучені Штати й Польща постачаються як еталонні календарі, обрані тому, що разом вони задіюють усі наявні типи правил: фіксовані дати, n-й день тижня місяця, дати, що обчислюються від Великодня, і американське правило, за яким свято, що випало на суботу, відзначається в попередню п’ятницю. Додати країну — це файл даних, а не зміна коду.
Усі формати одразу
Застосунку, що тестується, потрібна дата в тому вигляді, якого він чекає. Замість того щоб змушувати вас конвертувати, калькулятор друкує всі формати — і власну маску для тих, що не вкладаються в жоден стандарт.
$ 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)
Це значення epoch — не збіг: 2147483647 — це точно найбільше число, яке вміщує
знакове 32-розрядне ціле, і вся причина, чому ця дата важлива.
Читання дати у зворотний бік
Зворотний напрям не менш корисний: вставте дату з логу й дізнайтеся, що це таке. Коли формат
неоднозначний — а 04/08 неоднозначне в половині світу, — показуються обидва
прочитання, а не вгадується одне, бо саме з вгадування народився початковий звіт про
помилку.
$ 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)
Різниця в чотири місяці, і дні тижня різні. Дата у форматі ISO однозначна й читається як є, а те, що взагалі не є датою, відхиляється, а не вгадується.
Будується з кроків, а не з фрази
Момент — це відправна точка плюс кроки, і проміжний результат показується після кожного, тож вираз, що дав несподівану відповідь, показує, де він звернув не туди. П’ять видів кроків: зсув на одиницю, встановлення часу доби, стрибок на межу періоду, перехід до найближчого робочого дня й переписування в іншому часовому поясі.
# Остання секунда перед зміною року chrono calc --base today --snap eoy # Дев’яносто робочих днів уперед за американським банківським календарем chrono calc --base today --shift +90bd --calendar us-banking # Вісімнадцять років і день тому — перевірка віку chrono calc --base today --shift -18y --shift -1d
Будь-яка обчислена дата одразу йде в сесію підміни, а
--json видає той самий результат у машинному вигляді.
Дати, які варто тестувати →