أي تاريخ ينبغي أن تختبر؟
نصف اختبار التواريخ هو تحريك الساعة، ونصفه الآخر أن تعرف إلى أين تحرّكها. فالحاسبة المتاحة على الإنترنت تخبرك أي يوم يأتي بعد تسعين يومًا من اليوم، لكنها لا تخبرك أن الجواب عطلة مصرفية، أو أنه آخر يوم في الربع.
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)
قيمة الحقبة هذه ليست مصادفة - فالعدد 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 النتيجة نفسها بصيغة الآلة.
التواريخ الجديرة بالاختبار ←