Chạy một ứng dụng ở múi giờ khác
Báo cáo rơi vào sai ngày, lời nhắc reo sớm một giờ, dấu thời gian đọc ra là ngày mai - phần lớn chỉ lộ ra ở một múi giờ mà bạn không ngồi trong đó. Công cụ này cho một tiến trình độ lệch riêng của nó, trong khi múi giờ hệ thống của bạn vẫn nguyên chỗ cũ.
Vì sao các cách thông thường không giúp được
- Đổi múi giờ Windows thay đổi nó cho mọi thứ - lịch, nhật ký, các cuộc họp của bạn - và trên một máy được quản lý, có thể bạn không có quyền đổi.
- Đặt
TZhoạt động với một số runtime và không với số khác. Một ứng dụng Windows native đọcGetTimeZoneInformationsẽ chẳng hề nhận ra. - Công cụ dành cho nhà phát triển của trình duyệt ghi đè múi giờ cho một trang web, rất tuyệt, và không liên quan gì đến ứng dụng máy tính để bàn.
Một tiến trình, một độ lệch
Phiên mang độ lệch riêng của nó. Ứng dụng hỏi Windows nó đang ở múi giờ nào và nhận câu trả lời đó, trong khi mọi chương trình khác trên máy nhận câu trả lời thật.
# Cùng một thời điểm, nhìn từ bờ Tây nước Mỹ chrono run "C:\apps\test.exe" --at 2027-01-15T09:00:00 --zone -08:00 # Chỉ múi giờ - ngày thật của hôm nay, đồng hồ của người khác chrono run "C:\apps\test.exe" --zone +09:00
Máy tính ngày trả lời nửa còn lại của câu hỏi - một thời điểm nhất định thực sự đọc ra thế nào ở nơi khác. Phép chuyển đổi giữ nguyên thời điểm và chỉ đổi đồng hồ treo tường, chính là cách một ngày rơi vào sai ngày:
$ 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
Chín giờ sáng ở Trung Âu là nửa đêm ở bờ Tây nước Mỹ. Cùng một thời điểm, và một báo cáo hằng ngày nhóm theo ngày địa phương sẽ xếp nó vào một ngày khác tùy theo nơi nó chạy.
Những giới hạn trung thực, và ở đây chúng quan trọng
Múi giờ của phiên là một độ lệch cố định không có giờ mùa hè.
Một phiên đặt ở +01:00 vẫn ở +01:00 dù đồng hồ của nó chỉ tháng Một hay
tháng Bảy. Một lần chạy vượt qua lần chuyển giờ thật vì vậy sẽ lệch một giờ so với những gì múi giờ đó
thực sự hiển thị, và ép một ứng dụng đi qua một lần chuyển giờ mùa hè chưa phải thứ công cụ này làm
được. Máy tính ngày nói rõ điều đó thay vì đoán.
- Múi giờ tự báo là “Chrono Session”, một cái tên mà không registry Windows nào
biết. Bất cứ thứ gì ánh xạ cái tên đó ngược về một múi giờ - trong đó có
TimeZoneInfo.Localcủa .NET - sẽ quay về dùng độ lệch, và đó là câu trả lời đúng. Một ứng dụng khăng khăng đòi tên trong registry sẽ không tìm thấy. - Java nhận múi giờ phiên dưới dạng một độ lệch. Múi giờ phiên không có giờ mùa
hè và không có thành phố nào đứng sau, nên Java đặt tên nó theo độ lệch -
GMT+05:30cho một phiên ở +05:30. - Ở chế độ Chromium và Electron, các trang cũng đọc múi giờ của phiên. Đó là cùng một độ lệch cố định: mỗi trang và mỗi worker được đặt vào đó và kiểm tra điều nó đọc. Tiến trình chính của ứng dụng Electron chạy JavaScript trong Node mà phiên không với tới, nên nó giữ đồng hồ thật.
- Độ lệch chạy từ -14:00 đến +14:00 theo số phút nguyên. Mọi thứ ngoài khoảng đó bị từ chối chứ không bị lặng lẽ quay vòng.
Điều nào trong số đó áp dụng cho ứng dụng của bạn là thứ đo được chứ không phải đoán. Phiên tự báo cáo độ bao phủ của nó →