Tiếng Việt

Công cụ dành cho nhà phát triển · Trình chuyển đổi dấu thời gian Unix

Múi giờ không được bù đắp: cơ sở dữ liệu IANA tz và lý do nó quan trọng

· Lý lịch

dấu thời gian time-zones browser-apis

Đường dẫn vùng được đặt tên tạo ra các độ lệch khác nhau trong hai thời điểm
Hình minh họa vector ToolAcre gốc

Phần bù là một số; múi giờ là lịch sử của các con số và quy tắc khi chúng thay đổi. Bài đăng này giải thích sự khác biệt, giới thiệu cơ sở dữ liệu IANA tz mã hóa nó và cho biết lý do tại sao các bộ chuyển đổi dựa vào nó để đọc cục bộ.

Cuộc họp đã di chuyển được một giờ — giá trị chênh lệch được lưu trữ của +02:00 đúng vào tháng 7 và sai vào tháng 12

`+02:00` cố định được lưu bên cạnh cuộc họp tháng 7 có thể là kết quả chính xác trong thời gian đó và vẫn không thành công theo quy tắc cho tháng 12. Phần bù là một kết quả; vùng là bối cảnh quy tắc có khả năng tạo ra kết quả vào các ngày khác nhau. Việc lưu trữ một cái như thể nó là cái còn lại sẽ đóng băng một ảnh chụp nhanh.

Hàng cục bộ của ToolAcre yêu cầu Intl định dạng từng Ngày và yêu cầu chênh lệch số ngắn. Nó không thêm hằng số cấu hình vào kỷ nguyên. Thiết kế đó cho phép các quy tắc áp dụng của môi trường tác động đến từng thời điểm một cách riêng biệt.

Chênh lệch so với vùng — khoảng cách cố định từ UTC so với vùng được đặt tên với các quy tắc DST và lịch sử thay đổi

Giá trị chênh lệch cho biết khoảng cách giữa đồng hồ được hiển thị với UTC tại một thời điểm. Một vùng được đặt tên có thể mang một chuỗi các quy tắc bù trừ và những thay đổi lịch sử. Bản thân thời đại cũng không mang theo điều gì cả. Những khái niệm này sẽ chiếm các trường riêng biệt khi ứng dụng cần cả sự kiện và lịch trình theo địa điểm.

Đối với một sự kiện bất biến, việc lưu trữ tức thời có thể là đủ. Đối với “mở tại 09:00 trong khu vực này hàng ngày”, hãy giữ lại vùng được đặt tên vì các trường hợp trong tương lai phải được giải quyết theo thời gian trên tường. Việc sử dụng lại phần bù của ngày hôm qua coi quy tắc động là thuộc tính số cố định.

Cơ sở dữ liệu IANA tz — Tên khu vực/City, tại sao nó là bản ghi các quyết định chính trị và tần suất nó được cập nhật

Sổ làm việc có tên cơ sở dữ liệu IANA, nguồn gốc chính trị và tần suất cập nhật. Quá trình triển khai báo cáo tên vùng kiểu IANA từ `resolvedOptions()` nhưng không hiển thị phiên bản cơ sở dữ liệu, lịch cập nhật hoặc gói nguồn. Những chi tiết đó không được khẳng định ở đây.

Hạn chế này ảnh hưởng đến sinh sản. Nếu đầu ra ngày cũ khác nhau giữa các máy, hãy ghi lại chuỗi vùng và phiên bản nền tảng; không yêu cầu bộ quy tắc nào mới hơn chỉ tính riêng đồng hồ. Vùng được đặt tên sẽ cải thiện câu hỏi nhưng trình chuyển đổi không phải là trình kiểm tra dữ liệu múi giờ.

Các ứng dụng cần đầu ra lịch sử có thể tái tạo phải kiểm soát sự phụ thuộc dữ liệu vùng và ngày đại diện thử nghiệm của chúng. Dựa vào môi trường trình duyệt không xác định sẽ ủy quyền cho khả năng tái tạo đó.

Nguồn gốc quy tắc vùng được đặt tên và nhịp cập nhật không bị lộ khi triển khai này

ToolAcre hỏi trình duyệt về vùng và định dạng cục bộ của nó thông qua Intl. Kho lưu trữ không xác định liệu các quy tắc đến từ hệ điều hành, gói trình duyệt hay thành phần thời gian chạy khác. Nó bắt lỗi và lùi lại một cách an toàn thay vì để lộ kiến ​​trúc bên trong đó.

Do đó, “cục bộ” có nghĩa là môi trường được trình duyệt chọn tại thời điểm chuyển đổi. Thay đổi cài đặt thiết bị có thể thay đổi đầu ra mà không thay đổi kỷ nguyên. Đối với các bản kiểm tra, hãy giữ nguyên UTC và số liệu thô; sử dụng hiển thị cục bộ làm ngữ cảnh thay vì lưu trữ chuẩn.

Dự phòng cho ISO do lỗi định dạng sẽ duy trì ngay lập tức nhưng làm mất bản trình bày cục bộ được yêu cầu. Người tiêu dùng nên coi đó là bối cảnh hiển thị được giảm bớt chứ không phải ngày thay đổi.

Trình duyệt chọn và định dạng vùng cục bộ của nó; nguồn gốc của các quy tắc của nó không được khẳng định

Chọn hai thời điểm UTC cách nhau sáu tháng, chẳng hạn như `2025-01-15T12:00:00Z` và `2025-07-15T12:00:00Z`, chuyển đổi chúng thành giây và kiểm tra các hàng cục bộ trên một thiết bị. Ghi lại xem phần bù số có khác nhau hay không. Quan sát có giá trị đối với vùng và môi trường được hiển thị.

Sổ làm việc quy định độ lệch Europe/Berlin nhưng các quy tắc vùng được đặt tên đó không được đọc từ quá trình triển khai. Bài tập có thể lặp lại này tránh sử dụng bảng không được hỗ trợ trong khi dạy cùng một điểm khác biệt: một truy vấn vùng, hai thời điểm và có thể có hai kết quả bù trừ.

Nếu độ lệch khớp nhau thì quan sát vẫn mang tính thông tin: vùng được định cấu hình đó không bộc lộ sự khác biệt theo mùa tại những thời điểm đã chọn trong môi trường đó.

Ví dụ hoạt động: quan sát một vùng trình duyệt vào hai ngày thay vì các quy tắc Berlin mã hóa cứng

Hội đồng yêu cầu `timeZoneName: "shortOffset"`, trong đó ưu tiên mối quan hệ số học, chẳng hạn như GMT+1 thay vì tên viết tắt theo khu vực. Lựa chọn đó làm giảm sự phụ thuộc vào các nhãn có ý nghĩa có thể thay đổi tùy theo ngữ cảnh, mặc dù định dạng Intl chính xác vẫn là đầu ra của nền tảng.

Đối với dữ liệu được lưu trữ, hãy sử dụng mã định danh vùng chuẩn được xác định bởi thư viện đã chọn của ứng dụng thay vì hiển thị chữ viết tắt. Nhãn ngắn hướng tới người dùng có thể hữu ích nhưng nó không nên trở thành chìa khóa để xây dựng lại lịch trình trong tương lai.

Các phép bù số vẫn rõ ràng dưới dạng số học ngay lập tức. Hạn chế của họ là thiếu nhận dạng quy tắc chứ không phải là không có khả năng ánh xạ một đồng hồ đó đọc ngược về UTC.

Tránh viết tắt trong dữ liệu được lưu trữ; trình định dạng yêu cầu một khoảng bù số ngắn

Lập kế hoạch định kỳ trong tương lai cần có khoảng trống, sự chồng chéo và xử lý chính sách mà trình chuyển đổi này không cung cấp. Nó bắt đầu bằng một ngày hoặc kỷ nguyên đã được giải quyết và hiển thị nó. Nó không lựa chọn giữa hai giờ địa phương lặp lại hoặc sửa chữa một giờ địa phương không tồn tại.

Sử dụng thư viện lập lịch nhận biết vùng có hành vi được kiểm tra theo yêu cầu của bạn, sau đó kiểm tra các lần xuất hiện đã giải quyết tại đây nếu hữu ích. Việc tách độ phân giải khỏi màn hình giúp trình chuyển đổi đơn giản không trở thành bộ lập lịch vô tình với chính sách biên không xác định.

Sau đó, đầu ra của bộ lập lịch có thể được lưu trữ dưới dạng một kỷ nguyên để thực thi trong khi vẫn giữ nguyên vùng và mục đích thời gian tường ban đầu để tính toán lại hoặc giải thích trong tương lai.

Bài học rút ra: lưu trữ các khoảnh khắc dưới dạng kỷ nguyên, lưu trữ địa điểm dưới dạng tên vùng - và cách trình chuyển đổi dấu thời gian Unix sử dụng vùng trên trình duyệt của bạn để đọc cục bộ

Lưu trữ các khoảnh khắc dưới dạng đơn vị kỷ nguyên rõ ràng hoặc chuỗi UTC chuẩn và lưu trữ các vùng được đặt tên khi chính địa điểm đó quan trọng. Phần bù có thể đi kèm với đầu ra để giải thích nhưng nó không thể thay thế cho một trong hai trường. ToolAcre của UTC và các hàng cục bộ thể hiện sự tách biệt đó.

Khi kết quả cục bộ làm bạn ngạc nhiên, hãy kiểm tra nhãn vùng, tức thời và bù trừ trước khi thay đổi dữ liệu. Một bản vá bù đắp cố định có thể làm cho một ngày có vẻ đúng và ngày khác có vẻ sai. Mô hình bền bỉ giữ cho sự kiện ổn định và cho phép quy tắc vùng đã được xác minh cung cấp mặt đồng hồ của nó.

Mô hình này cũng hỗ trợ việc di chuyển: người dùng có thể xem một khoảnh khắc được lưu trữ trong một vùng cục bộ mới mà không cần viết lại sự kiện hoặc làm mất bối cảnh lập lịch ban đầu của nó.