Thông báo lỗi Ngày tháng: ngày không hợp lệ '2016-10-16'


35

Hôm nay đồng hồ của tôi đã tự động được điều chỉnh theo thời gian mùa hè và một kịch bản từ crontab bắt đầu thất bại. Tôi đã xem xét những gì đang xảy ra và lỗi sau đang được hiển thị, với LC_ALL=C:

ngày: ngày không hợp lệ '2016-10-16'

Tôi mặc dù tốt nhất chỉ là khởi động lại hệ thống, nhưng bây giờ tôi đã khởi động lại và lỗi vẫn xuất hiện:

$ date -d '2016-10-15'
Sat Oct 15 00:00:00 BRT 2016
$ date -d '2016-10-16'
date: data inválida “2016-10-16”
$ date -d '2016-10-17'
Mon Oct 17 00:00:00 BRST 2016

Điều gì có thể gây ra điều này?


Hệ điều hành nào bạn đang chạy lệnh này? Không thể sao chép trên Debian 8. Đã thử với hai locales: sv_SE.utf8en_us.utf-8.
malawlawns

2
Vào thời điểm nào trong ngày (đêm), Brazil chuyển đồng hồ sang giờ mùa hè?
techraf

Tôi mặc dù tất cả các quốc gia nơi chuyển dịch vào thời gian muộn, như 2 giờ sáng, nơi ít có khả năng gây ra vấn đề.
njzk2

Câu trả lời:


57

Vấn đề là thời gian tiết kiệm ánh sáng ban ngày đã thay đổi và chuyển tiếp 1 giờ, vào ngày 16 tháng 10 năm 2016 trong múi giờ của bạn:

$ zdump -v America/Sao_Paulo | awk '/Oct 16/ && /2016/'
America/Sao_Paulo  Sun Oct 16 02:59:59 2016 UTC = Sat Oct 15 23:59:59 2016 BRT isdst=0
America/Sao_Paulo  Sun Oct 16 03:00:00 2016 UTC = Sun Oct 16 01:00:00 2016 BRST isdst=1

Vì vậy, bất kỳ thời gian nào từ giữa 00:00đến 00:59ngày đó đều được coi là không hợp lệ trong múi giờ của bạn (nhưng có thể hợp lệ ở những người khác):

$ TZ=America/Sao_Paulo gdate -d '2016-10-16 0:59'
gdate: invalid date ‘2016-10-16 0:59’

$ TZ=Asia/Ho_Chi_Minh gdate -d '2016-10-16 0:59'
Sun Oct 16 00:59:00 ICT 2016

Bạn có thể đặt thời gian bổ sung, không nằm trong phạm vi đó:

$ TZ=America/Sao_Paulo gdate -d '2016-10-16 1:00'
Sun Oct 16 01:00:00 BRST 2016

Trên đây là hành vi ngày GNU.

Ngày BSD không có vấn đề này. Nếu ngày đầu vào không hợp lệ trong múi giờ, nó sẽ được điều chỉnh âm thầm trong 1 giờ cho đến khi đạt đến thời gian hợp lệ:

$ TZ=America/Sao_Paulo date -j -f '%Y%m%d%H%M' 201610160000
Sun Oct 16 01:00:53 BRST 2016

1 giờ 53 giây?!
Domen

Vì vậy, nó điều chỉnh thời gian bằng 53 giây quá xa trong tương lai? Hay tôi đã hiểu nhầm điều gì?
Domen

1
Aah, có ý nghĩa; bảo tồn dữ liệu không được chỉ định (trái ngược với xóa). Vẫn còn một chút lạ khi điều chỉnh về phía trước trước 00:59:07 sẽ là đủ trong trường hợp này.
Domen

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.