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 เป็นจำนวนนาทีเต็ม ค่าที่อยู่นอกช่วงนั้นจะถูกปฏิเสธ ไม่ถูกวนกลับโดยเงียบ ๆ

ข้อไหนในนี้ใช้กับแอปของคุณ เป็นสิ่งที่วัดได้ ไม่ต้องเดา เซสชันรายงานความครอบคลุมของตัวเอง →

ลองใช้