Lỗi "Failed to parse time specification" khi thiết lập thời gian trên ubuntu

Chào mọi người, mình đang làm tính năng thiết lập thời gian cho thiết bị của mình (thiết bị đang chạy ubuntu). Mình sử dụng command timedatectl set-time "YYYY-MM-DD HH:MM:SS" để thiết lập thời gian, trong quá trình test, khi mốc thời gian vượt quá ngày 2038-01-19 sẽ bị gặp lỗi Failed to parse time specification.
Ảnh minh họa
image
Các mốc thời gian nhỏ hơn khoảng thời gian kia thì vẫn hoạt động bình thường.
Mình đã tìm kiếm trên google nhưng vẫn chưa tìm ra được cách giải quyết, mong mọi người giúp đỡ mình trường hợp này. Mình xin cám ơn

Mình nghĩ thời gian được lưu ở dạng số nguyên có dấu (int) nên xảy ra vấn đề này.
Giá trị lớn nhất của int2,147,483,647 thời gian bạn nhập ngày 18 là 2,147,408,875 vẫn nằm trong giới hạn của int và đến ngày 19 là 2,147,495,275, vượt giới hạn của int.
(Giờ tính theo múi giờ GMT+0).

Nếu bản thân máy tính vẫn có thể chạy hơn nữa, thì vấn đề do timedatectl đã dùng 1 biến kiểu int để lưu trữ và chính nó gây nên chuyện này.
Mình suy đoán thế thôi, không chắc chắn đâu nhé.:smile:

5 Likes

các hiện thống hiện tại chỉ lưu timestamp với số nguyên chỉ có 32bit thôi, nên đến 2038 thì nó vượt quá thì tạch thôi
mà có lý do gì để bạn lại thiết lập thời gian trên máy bạn như vậy? chỉ vọc thử lệnh? hay bạn đọc thấy ở đâu đó và muốn challange mọi người :))

4 Likes

Nguyên nhân và cách giải quyết (mitigation) của từng platform: https://en.wikipedia.org/wiki/Year_2038_problem.

4 Likes

Cám ơn bạn rất nhiều, thì ra là vấn đề nằm ở đó

Cám ơn bạn, mình suy nghĩ mãi không biết vấn đề nằm ở đâu thì ra là do cấu trúc 32bit. Do mình làm xong cái tính năng thiết lập thời gian đang thử vài test case rồi gặp lỗi này, chứ không phải cố tình gì đâu

Cám ơn bạn rất nhiều, trong link mô tả rất chi tiết luôn, rất hữu ích.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?