คำถามอื่น ๆ ทั้งหมดเกี่ยวกับเครือข่าย SE จะจัดการกับสถานการณ์ที่สมมติว่าวันนั้นเป็นnow
( Q ) หรือเมื่อมีการระบุเฉพาะวันที่ ( Q )
สิ่งที่ฉันต้องการทำคือระบุวันที่และเวลาจากนั้นลบเวลาออก
นี่คือสิ่งที่ฉันลองก่อน:
date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"
ผลลัพธ์นี้ใน2018-12-10 06:39:55
- มันเพิ่ม 7 ชั่วโมง จากนั้นหัก 20:05 นาที
หลังจากอ่านman
และinfo
หน้าของdate
ฉันคิดว่าฉันได้รับการแก้ไขด้วย:
date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"
แต่ผลลัพธ์เดียวกัน ใช้เวลา 7 ชั่วโมงจากที่ไหน?
ฉันลองวันอื่นด้วยเช่นกันเพราะฉันคิดว่าบางทีเราอาจมีวินาทีกระโดด 7200 วินาทีในวันนั้นใครจะรู้ฮ่า ๆ ๆ แต่ผลลัพธ์เดียวกัน
ตัวอย่างเพิ่มเติม:
$ 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
แต่ที่นี่มันน่าสนใจ หากฉันเว้นเวลาในการป้อนข้อมูลก็จะทำงานได้ดี:
$ 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
ฉันกำลังคิดถึงอะไร
ปรับปรุง:ฉันได้เพิ่มZ
ในตอนท้ายและมันเปลี่ยนพฤติกรรม:
$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00
ฉันยังคงสับสนอยู่ มีไม่มากในหน้าข้อมูล GNUเกี่ยวกับวันที่
ฉันเดาว่านี่เป็นปัญหาเกี่ยวกับเขตเวลา แต่อ้างถึงThe Calendar WikiบนISO 8601 :
หากไม่มีการให้ข้อมูลความสัมพันธ์ UTC กับการแสดงเวลาเวลาจะถือว่าเป็นเวลาท้องถิ่น
ฉันต้องการอะไร เวลาท้องถิ่นของฉันตั้งค่าไว้ถูกต้องเช่นกัน ฉันไม่แน่ใจว่าทำไมวันที่จะยุ่งกับเขตเวลาในกรณีที่ง่าย ๆ นี้ของฉันที่ให้เวลาและต้องการลบบางสิ่งออกจากมัน ไม่ควรลบชั่วโมงจากสตริงวันที่ก่อนใช่หรือไม่ แม้ว่ามันจะแปลงเป็นวันที่ก่อนจากนั้นก็ทำการลบถ้าฉันลบการลบออกไปฉันก็จะได้สิ่งที่ต้องการ:
$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00
ดังนั้นหากนี่เป็นปัญหาเขตเวลาอย่างแท้จริงความบ้าคลั่งนั้นมาจากไหน?