รันแอปในเขตเวลาอื่น
รายงานที่ตกผิดวัน การแจ้งเตือนที่ดังก่อนเวลาหนึ่งชั่วโมง ไทม์สแตมป์ที่อ่านแล้วเป็นของพรุ่งนี้ - ส่วนใหญ่ปรากฏเฉพาะในเขตเวลาที่คุณไม่ได้อยู่ เครื่องมือนี้ให้หนึ่งโพรเซสมีออฟเซ็ตของตัวเอง ขณะที่เขตเวลาของระบบคุณอยู่ที่เดิมทุกประการ
ทำไมวิธีทั่วไปจึงไม่ช่วย
- การเปลี่ยนเขตเวลาของ 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 เป็นจำนวนนาทีเต็ม ค่าที่อยู่นอกช่วงนั้นจะถูกปฏิเสธ ไม่ถูกวนกลับโดยเงียบ ๆ
ข้อไหนในนี้ใช้กับแอปของคุณ เป็นสิ่งที่วัดได้ ไม่ต้องเดา เซสชันรายงานความครอบคลุมของตัวเอง →