Chrono Mock
اللغةالعربية

شغّل تطبيقًا في منطقة زمنية أخرى

التقرير الذي يقع في اليوم الخطأ، والتذكير الذي يرنّ قبل ساعة، والطابع الزمني الذي يُقرأ على أنه غدًا - معظم ذلك لا يظهر إلا في منطقة لا تجلس فيها. وهذه الأداة تمنح عملية واحدة إزاحتها الخاصة، بينما تبقى منطقة نظامك كما كانت تمامًا.

لماذا لا تفيد الحلول المعتادة

  • تغيير المنطقة الزمنية في Windows يغيّرها لكل شيء - تقويمك وسجلاتك واجتماعاتك - وعلى جهاز مُدار قد لا يكون تغييرها من حقك.
  • ضبط TZ يعمل مع بعض بيئات التشغيل دون بعضها. وتطبيق Windows أصلي يقرأ GetTimeZoneInformation لن يلاحظه إطلاقًا.
  • أدوات مطوّري المتصفح تتجاوز المنطقة لصفحة ويب، وهذا ممتاز، لكنه لا صلة له بتطبيق سطح المكتب.

عملية واحدة، إزاحة واحدة

تحمل الجلسة إزاحتها الخاصة. يسأل التطبيق Windows في أي منطقة هو فيحصل على هذا الجواب، بينما يحصل كل برنامج آخر على الجهاز على الجواب الحقيقي.

# اللحظة نفسها، كما تُرى من الساحل الغربي الأمريكي
chrono run "C:\apps\test.exe" --at 2027-01-15T09:00:00 --zone -08:00

# المنطقة وحدها - تاريخ اليوم الحقيقي، وساعة شخص آخر
chrono run "C:\apps\test.exe" --zone +09:00

وتجيب الحاسبة عن النصف الآخر من السؤال - ماذا تُقرأ لحظة بعينها في مكان آخر. فالتحويل يحفظ اللحظة ويغيّر ساعة الحائط وحدها، وهذا بالضبط ما يجعل التاريخ يقع في اليوم الخطأ:

$ chrono calc --base 2027-01-15T09:00:00 --zone +01:00 --to-zone -08:00
Chrono Mock - date calculator
  base:    2027-01-15T09:00:00
  step 1:  zone -08:00  -> 2027-01-15T00:00:00
  result:  2027-01-15T00:00:00
  formats:
    ISO date      2027-01-15
    ISO datetime  2027-01-15T00:00:00-08:00
    US            01/15/2027
    PL            15.01.2027

التاسعة صباحًا في وسط أوروبا هي منتصف الليل على الساحل الغربي الأمريكي. اللحظة نفسها، والتقرير اليومي الذي يجمّع حسب التاريخ المحلي يضعها في يوم مختلف بحسب المكان الذي يعمل فيه.

حدود صادقة، وهي مهمة هنا

المنطقة الزمنية للجلسة إزاحة ثابتة بلا توقيت صيفي.

الجلسة المضبوطة على +01:00 تبقى عند +01:00 سواء قرأت ساعتها يناير أو يوليو. ولذلك فإن تشغيلًا يعبر انتقالًا حقيقيًا ينحرف ساعةً عمّا ستعرضه تلك المنطقة فعلًا، وإجبار تطبيق على عبور انتقال التوقيت الصيفي ليس شيئًا تفعله هذه الأداة بعد. وتقول حاسبة التواريخ ذلك بدل أن تخمّن.

  • تُبلّغ المنطقة عن نفسها بأنها «Chrono Session»، وهو اسم لا يعرفه أي سجل في Windows. وأي شيء يعيد ربط هذا الاسم بمنطقة - ومنه TimeZoneInfo.Local في .NET - يرجع إلى الإزاحة بدلًا من ذلك، وهذا هو الجواب الصحيح. أما التطبيق الذي يُصرّ على اسم من السجل فلن يجد واحدًا.
  • تلتقط Java منطقة الجلسة إزاحةً. فمنطقة الجلسة بلا توقيت صيفي ولا مدينة خلفها، فتسمّيها Java باسم إزاحتها - GMT+05:30 لجلسة عند +05:30.
  • في وضع Chromium وElectron تقرأ الصفحات أيضًا المنطقة الزمنية للجلسة. وهي الإزاحة الثابتة نفسها: توضع كل صفحة وكل worker عليها وتتحقق مما تقرؤه. وتشغّل العملية الرئيسية لتطبيق Electron شيفرة JavaScript داخل Node الذي لا تصل إليه الجلسة، فتحتفظ بالساعة الحقيقية.
  • تمتد الإزاحات من -14:00 إلى +14:00 بدقائق كاملة. وما يخرج عن هذا المدى يُرفض ولا يُلفّ بصمت.

وأيٌّ من هذه ينطبق على تطبيقك يمكن قياسه لا تخمينه. تُبلّغ الجلسة عن تغطيتها هي ←

جرّبه