Dấu thời gian, vấn đề năm 2038 cho hệ thống Ubuntu 64 bit


24

Tôi đang sử dụng hệ thống Ubuntu 64 bit.

Tôi hiện đang làm việc trên một dự án kết hợp MariaDB. Tôi dự định giới thiệu kỹ thuật dấu thời gian vào dự án để mọi người sẽ nhận được thời gian chính xác cho các múi giờ khác nhau.

Tôi đã nghe và đọc một số bài viết về vấn đề năm 2038 cho dấu thời gian. Nhiều bài viết đề nghị chúng tôi sử dụng hệ thống 64 bit để mua thêm một chút thời gian.

Bao nhiêu thời gian này là bit bit bitcoin đề cập đến? Có đủ lâu để chúng tôi có thể quản lý các ứng dụng web cho đến khi kết thúc không? Nếu đó không phải là trường hợp, nó giống như chỉ gia hạn hai năm vậy thì khi năm 2040 đến, chúng ta sẽ có những ứng dụng không hoạt động phù hợp chứ?


27
Các hệ thống 64 bit sử dụng time_tsố nguyên 64 bit sẽ cho bạn thêm một chút thời gian - đến 15:30:08 vào Chủ nhật, ngày 4 tháng 12, 292,277,026,596. Hy vọng nó đủ dài cho ứng dụng của bạn;)
Ron

4
Nó không cung cấp cho bạn "một chút" nữa. Nó cung cấp cho bạn chính xác hơn 32 bit.
dùng12205

5
Dấu thời gian 64 bit là một trong những biện pháp ngăn chặn khác. Còn những người làm việc trên Project Utopia trong 100.000.000.000 CE thì sao? Họ cũng sẽ cần các hệ thống máy tính chức năng! Sử dụng dấu thời gian 128 bit sẽ cho phép chúng tôi xác định duy nhất bất kỳ lúc nào từ không chỉ lần lặp này của vũ trụ, mà nhiều, rất nhiều người khác.
Blacklight Shining

1
Như bạn đã không bao giờ chấp nhận bất kỳ câu trả lời trước khi vào trang web này: Nếu một trong những câu trả lời dưới đây giúp bạn, đừng quên nhấn vào màu xám ở bên trái của văn bản của nó, có nghĩa Vâng, câu trả lời này là hợp lệ ! ;-)
Fabby

Câu trả lời:


34

Chà, nếu có một tùy chọn để mua "bit" theo nghĩa đen, tức là chuyển từ số nguyên 32 bit đã ký sang số nguyên 32 bit không dấu, mọi thứ tiếp tục hoạt động vào 2106.

Chuyển sang 64 bit là "tốt hơn một chút". Bạn nhận được hàng trăm tỷ năm giải quyết.

Và Ubuntu thực hiện điều này:

$ uname -p
x86_64

$ date --date=9090-01-01 +%s
224685532800

Tuy nhiên, đó là cấp độ hệ điều hành. Chỉ vì Ubuntu sử dụng số nguyên 64 bit cho thời gian của nó không có nghĩa là MySQL / MariaDB sẽ sử dụng nó để lưu trữ dấu thời gian của nó. Nếu ngày qua 2038 quan trọng với bạn bây giờ, hãy bắt đầu thử nghiệm ngay lập tức.

Thật ra, tôi có thể giúp bạn tiết kiệm thời gian. Nó vẫn bị hỏng. Lỗi này đã được báo cáo hơn một thập kỷ trước nhưng thử nghiệm chính của nó vẫn thất bại với int 64bit.

mysql> select from_unixtime(2548990800);
+---------------------------+
| from_unixtime(2548990800) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

Đây thậm chí không phải là lưu trữ. Nó hơi thảm hại.

(Và vâng, nó đã được chạy trên MariaDB, phiên bản 10.1)


8
10 năm qua, họ vẫn còn 22 năm để sửa nó. <
Bắt chéo

4
NB: Sử dụng số nguyên 32 bit không dấu là một hack .
Kevin

6

Đừng lưu trữ nó như một số nguyên. Lưu trữ dưới dạng chuỗi ngày được định dạng ISO 8601 . Đây là định dạng tiêu chuẩn được sử dụng trên Internet.

9999-12-31T23:59:59+00:00

17
Tất cả chúng ta hãy nâng ly lên Bug năm10K! ;) Nhưng về mặt nghiêm trọng, trong khi các chuỗi thực sự có thể mở rộng, chúng tương đối lớn (ví dụ của bạn là 200 bit!) Và phân tích và thao tác các số nguyên thủy nhanh hơn gấp ba lần. Đó là vấn đề.
Oli

6
Đây là định dạng tuyệt vời để hiển thị - và chỉ cho điều đó. Đối với bất cứ điều gì khác (nghĩa là xử lý dữ liệu cho đến giây phút cuối cùng khi bạn quyết định định dạng dữ liệu đó cho người dùng), như so sánh, thực hiện arithologists, v.v., dấu thời gian Unix như một số nguyên (hoặc float) tốt hơn nhiều.
egmont

1
@Oli Nó quan trọng, nếu nó thực sự quan trọng. Giải pháp này không thất bại khi có thời gian cũ hơn thời đại UNIX. Định dạng này là tiêu chuẩn được sử dụng cho các ngày trên Internet, trong các giao thức và API. Nếu bạn đang lưu trữ một cái gì đó trong một cột MariaDB, thì thực sự, đó là cách bạn nên lưu trữ nó trên đĩa. Chắc chắn, trong bộ nhớ, có thể bạn muốn lưu trữ nó vào một cấu trúc dữ liệu dễ sử dụng hơn. Và bạn không cần 40 bit cuối nếu bạn luôn sử dụng UTC.
dobey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.