Tất cả các câu hỏi khác trên mạng SE xử lý các tình huống trong đó ngày được giả sử là now
( Q ) hoặc trong đó chỉ một ngày được chỉ định ( Q ).
Những gì tôi muốn làm là cung cấp một ngày và thời gian, và sau đó trừ đi một thời gian từ đó.
Đây là những gì tôi đã thử đầu tiên:
date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"
Kết quả này trong 2018-12-10 06:39:55
- Nó thêm 7 giờ. Sau đó trừ đi 20:05 phút.
Sau khi đọc man
và info
trang date
, tôi nghĩ rằng tôi có nó cố định với điều này:
date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"
Nhưng, kết quả tương tự. Nó thậm chí còn nhận được 7 giờ từ đâu?
Tôi cũng đã thử những ngày khác vì tôi nghĩ có lẽ chúng tôi đã có 7200 giây nhuận vào ngày hôm đó, ai biết lol. Nhưng kết quả tương tự.
Một vài ví dụ nữa:
$ date -d "2018-12-16T00:00:00 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-17_02:00:00
$ date -d "2019-01-19T05:00:00 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-19_08:55:00
Nhưng ở đây nó trở nên thú vị. Nếu tôi bỏ qua thời gian trên đầu vào, nó hoạt động tốt:
$ date -d "2018-12-16 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-15_00:00:00
$ date -d "2019-01-19 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-18_21:55:00
$ date --version
date (GNU coreutils) 8.30
Tôi đang thiếu gì?
Cập nhật: Tôi đã thêm một Z
ở cuối và nó đã thay đổi hành vi:
$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00
Tôi vẫn còn bối rối. Không có nhiều về điều này trong trang thông tin GNU về ngày.
Tôi đoán đây là sự cố múi giờ, nhưng trích dẫn Lịch Wiki trên ISO 8601 :
Nếu không có thông tin quan hệ UTC nào được đưa ra với biểu diễn thời gian, thì thời gian được coi là theo giờ địa phương.
Đó là những gì tôi muốn. Giờ địa phương của tôi được đặt chính xác quá. Tôi không chắc tại sao ngày tháng lại gây rối với múi giờ trong trường hợp đơn giản này là tôi cung cấp một mốc thời gian và muốn trừ đi thứ gì đó từ nó. Không nên trừ số giờ từ chuỗi ngày đầu tiên? Ngay cả khi nó chuyển đổi nó thành một ngày đầu tiên và sau đó thực hiện phép trừ, nếu tôi bỏ qua bất kỳ phép trừ nào, tôi sẽ nhận được chính xác những gì tôi muốn:
$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00
Vậy NẾU đây thực sự là một vấn đề múi giờ, sự điên rồ đó đến từ đâu?