Công cụ dành cho nhà phát triển · Trình chuyển đổi dấu thời gian Unix
Dấu thời gian Unix phủ định: cách thể hiện ngày trước 1970
· Cách thức hoạt động
dấu thời gian unix-time data-formats
Thời gian Unix đếm xuôi từ 1970 nhưng cũng đếm ngược. Bài đăng này giải thích ý nghĩa của kỷ nguyên âm, cách −1 trở thành giây cuối cùng của 1969 và nơi các hệ thống giả định giá trị dương bị phá vỡ.
Ngày sinh có dấu trừ — người dùng sinh vào 1965 được lưu trữ dưới dạng số nguyên âm và mã coi đó là lỗi
Bản ghi dành cho người sinh trước 1970 có thể chứa dấu thời gian Unix âm một cách hợp pháp. Việc từ chối mọi dấu trừ ở đầu sẽ chuyển đổi lựa chọn biểu diễn thành lỗi mất dữ liệu. Trình phân tích cú pháp của ToolAcre chấp nhận một dấu hiệu tùy chọn và `fromEpoch` đánh dấu giá trị mili giây được giải thích dưới 0 là `beforeEpoch` thay vì coi nó là không hợp lệ.
Sau đó, màn hình sẽ thêm ghi chú giải thích rằng thời điểm đó có trước kỷ nguyên Unix. Điều này mạnh hơn việc âm thầm hiển thị ngày tháng vì nó giúp người đánh giá nhìn thấy dấu hiệu bất thường. Nếu một lược đồ ngược dòng cấm số âm thì lỗi thuộc về lược đồ hoặc quá trình di chuyển đó chứ không phải thuộc về số học ánh xạ số đếm trên cả hai vế của số 0.
Số nguyên có dấu và kỷ nguyên — tại sao time_t được ký và −1 và −86400 tương ứng với những gì
Số không là 1970-01-01T00:00:00.000Z. Kiểm tra kho lưu trữ chứng minh rằng −1 giây là thời điểm ngay trước đó, `1969-12-31T23:59:59.000Z`. Tương tự, −86,400 giây là một POSIX ngày cố định trước số 0. Số học có dấu làm cho trục liên tục thay vì yêu cầu kỷ nguyên thứ hai đối với các bản ghi cũ hơn.
Đề cương phân bổ dung lượng lưu trữ đã ký cho `time_t`, nhưng mã này không thiết lập lịch sử hoặc loại thiết kế được mọi nền tảng sử dụng. Bằng chứng hẹp hơn của nó là đủ: JavaScript số có thể âm, phát hiện sử dụng cường độ tuyệt đối và Ngày có thể định dạng kết quả. Mô tả loại khai báo của trường sản xuất tách biệt với đầu vào được chấp nhận của trình chuyển đổi.
Số học kỷ nguyên đã ký khoảng 0, không xác nhận lý do tại sao mỗi lần_t chọn loại của nó
Các giá trị âm giữ nguyên sự phân biệt đơn vị như các giá trị dương. `−1000` giây điểm 1,000 giây trước kỷ nguyên, trong khi `−1000` mili giây chỉ điểm một giây trước kỷ nguyên đó. Tính năng phát hiện tự động coi cả hai là giây vì cường độ của chúng thấp hơn 10¹¹, do đó, số mili giây ngắn trước kỷ nguyên yêu cầu lựa chọn mili giây rõ ràng.
Đây là một thất bại cụ thể của văn hóa dân gian đếm chữ số. Nhà phát triển nhìn thấy dấu trừ và bốn chữ số không thể suy ra đơn vị từ hình thức bên ngoài. Sử dụng hợp đồng nguồn, chọn bộ chọn và kiểm tra ghi chú đơn vị. Quy tắc cường độ của ToolAcre là mặc định cho dữ liệu thông thường, không thay thế cho siêu dữ liệu trên các giá trị lịch sử gần với 1970.
Khi giá trị âm không thành công — các hệ thống sử dụng −1 làm trọng điểm, bộ lưu trữ không dấu, bộ chọn ngày kẹp và các ngôn ngữ từ chối chúng
Bên ngoài trình chuyển đổi, `−1` đôi khi được đặt trước dưới dạng trọng điểm có giá trị bị thiếu và cột không dấu không thể giữ lại bất kỳ giá trị âm nào ngay lập tức. Đó là những khả năng thiết kế phổ biến, nhưng kho lưu trữ không thể chứng nhận cách hoạt động của một cơ sở dữ liệu, bộ chọn ngày hoặc ngôn ngữ cụ thể. Kiểm tra ranh giới thực tế trước khi di chuyển ngày lưu trữ qua đó.
Một thăm dò hữu ích chứa ba giá trị: null hoặc điểm đánh dấu bị thiếu được ghi lại, −1 và một ngày rõ ràng là cũ hơn. Nếu −1 biến mất trong khi giá trị cũ vẫn tồn tại thì việc xử lý trọng điểm sẽ có liên quan; nếu tất cả các tiêu cực đều thất bại, hãy kiểm tra loại và xác nhận. Không "khắc phục" triệu chứng bằng cách thêm 1970 năm hoặc lấy giá trị tuyệt đối vì cả hai đều tạo ra các thời điểm khác nhau.
Ví dụ hoạt động: chuyển đổi −14182940 — số học thành ngày 1969 tháng 7 ở UTC và ở khu vực địa phương phía tây Greenwich
Trong −14,182,940 giây, hãy bắt đầu tại kỷ nguyên và lùi lại 164 hoàn thành 86,400 giây ngày, còn lại 13,340 giây. Thời gian còn lại là 3 giờ, 42 phút và 20 giây. Kết quả UTC đọc là `1969-07-20T20:17:40.000Z`, tức thì được chọn riêng ở đây cho bài viết này.
Chỉ số địa phương ở phía tây UTC có thể hiển thị giờ đồng hồ treo tường sớm hơn hoặc thậm chí là một ngày khác nhưng kết quả chính xác của nó phụ thuộc vào khu vực trình duyệt và các quy tắc quốc tế. Đọc nó từ bảng điều khiển thay vì xuất bản một câu trả lời chung. Xác minh cố định là hàng ISO; hàng cục bộ là chú thích môi trường trên cùng số âm đó.
Ví dụ hoạt động: chuyển đổi −14,182,940 bằng số học UTC có thể kiểm chứng
ToolAcre kiểm tra giá trị diễn giải của nó theo ±8.64×10¹⁵ mili giây, Phạm vi ngày được nêu trong nguồn. Nó cũng chứng minh sự chuyển đổi −2,208,988,800 giây thành `1900-01-01T00:00:00.000Z`. Những thông tin thực tế đó cho thấy rằng tuyến đường này đạt đến mức tốt trước 1970 mà không ngụ ý rằng mọi hệ thống lưu trữ đều có thể mang cùng một phạm vi.
Trường 32-bit đã ký có khoảng toán học hẹp hơn ngày JavaScript nhưng trình chuyển đổi không kiểm tra độ rộng trường khi bạn dán một số. Giữ nguyên loại nguồn trong quá trình kiểm tra. Việc chuyển đổi trình duyệt thành công thể hiện tính đại diện ở đây chứ không phải việc chuyển đổi vòng quanh an toàn thông qua chương trình cơ sở, cột SQL hoặc giao thức nhị phân ở nơi khác.
Phạm vi ngày của trình chuyển đổi đã được biết; giới hạn 32-bit bên ngoài tùy thuộc vào loại bộ nhớ của chúng
Việc chuyển số đếm thành JavaScript Ngày không tái tạo lại lịch dân sự thực sự được in ở mọi địa điểm từ nhiều thế kỷ trước. Việc triển khai sử dụng mô hình ngày của nền tảng và trả về biểu diễn ISO; nó không chứa bộ chọn lịch lịch sử, kho lưu trữ địa phương hoặc nguồn tài liệu để cải cách lịch. Những tuyên bố đó là cố ý vắng mặt.
Đối với các bản ghi phần mềm hiện đại, việc biểu diễn máy tiên đoán có thể vẫn chính xác là hợp đồng mà bạn cần. Đối với phả hệ, lịch sử pháp lý hoặc phiên âm lưu trữ, hãy lưu giữ ngày tháng được viết ban đầu và ngữ cảnh lịch của nó cùng với bất kỳ kỷ nguyên phát sinh nào. Một số có thể sắp xếp thuận tiện sẽ không xóa đi sự không chắc chắn mà việc chuyển đổi không thể giải quyết được.
Tuyên bố về lịch sử lịch nằm ngoài bằng chứng của công cụ chuyển đổi này
Tiêu cực là một hướng trên trục kỷ nguyên, không phải là loại lỗi. ToolAcre phân tích cú pháp, áp dụng các quy tắc giây hoặc mili giây tương tự theo độ lớn và gắn cờ kết quả như trước kỷ nguyên. Hành vi đó cho phép người đánh giá phân biệt một khoảnh khắc cũ hợp pháp với lỗi trọng điểm hoặc lỗi lưu trữ không dấu ở nơi khác.
Khi kiểm tra dữ liệu trước1970, hãy nêu đơn vị, loại nguồn và quy ước giá trị còn thiếu trước khi diễn giải dấu hiệu. Sau đó so sánh kết quả ISO với một bản ghi đã biết. Chỉ riêng dấu hiệu đã là số học có ý nghĩa; lược đồ xung quanh xác định xem nhà sản xuất dự định sử dụng số học đó hay sử dụng cùng một số làm giá trị điều khiển.