ข้อความแสดงข้อผิดพลาด“ วันที่: วันที่ไม่ถูกต้อง” 2016-10-16 '”


35

วันนี้นาฬิกาของฉันถูกปรับเป็นฤดูร้อนโดยอัตโนมัติและสคริปต์จาก crontab เริ่มต้นล้มเหลว ฉันได้ดูสิ่งที่เกิดขึ้นและข้อผิดพลาดต่อไปนี้จะถูกแสดงด้วยLC_ALL=C:

วันที่: วันที่ไม่ถูกต้อง '2016-10-16'

ฉันว่ามันจะเป็นการดีที่สุดเพียงแค่รีบูตระบบ แต่ตอนนี้ฉันได้รีบูตและข้อผิดพลาดยังคงปรากฏขึ้น:

$ 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

สิ่งใดที่ทำให้เกิดสิ่งนี้


ระบบปฏิบัติการใดที่คุณใช้คำสั่งนี้ ไม่สามารถทำซ้ำใน Debian 8. พยายามกับสองแตกต่างกันlocaleS: และsv_SE.utf8 en_us.utf-8
maulinglawns

2
บราซิลส่งต่อนาฬิกาไปยังเวลาฤดูร้อนในเวลาใด (กลางวัน)
techraf

ฉันคิดว่าทุกประเทศที่มีการเปลี่ยนแปลงในช่วงดึกเช่น 2 ในตอนเช้าซึ่งมีโอกาสน้อยที่จะทำให้เกิดปัญหา
njzk2

คำตอบ:


57

ปัญหาคือการเปลี่ยนเวลาตามฤดูกาลและส่งต่อ 1 ชั่วโมงในวันที่ 16 ตุลาคม 2559 ในเขตเวลาของคุณ:

$ 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

ดังนั้นเวลาระหว่าง00:00ถึง00:59ในวันนั้นถือว่าไม่ถูกต้องในเขตเวลาของคุณ (แต่อาจใช้ได้ในคนอื่น ๆ ):

$ 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

คุณสามารถตั้งเวลาเพิ่มเติมซึ่งไม่อยู่ในช่วงดังกล่าว:

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

ด้านบนคือพฤติกรรมวันที่ของ GNU

วันที่ BSD ไม่มีปัญหานี้ หากวันที่ป้อนไม่ถูกต้องในเขตเวลามันจะถูกปรับอย่างเงียบ ๆ ไปข้างหน้า 1 ชั่วโมงจนกว่าจะถึงเวลาที่ถูกต้อง:

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

1 ชั่วโมง 53 วินาที!
domen

ดังนั้นมันจึงปรับเวลาโดย 53 วินาทีไกลเกินไปในอนาคต? หรือฉันเข้าใจผิดบางอย่าง?
domen

1
อ๊ะเข้าใจแล้ว เก็บรักษาข้อมูลที่ไม่ได้ระบุไว้ (ต่างจากการหักล้าง) ยังคงแปลกที่การปรับไปข้างหน้าภายในเวลา 00:59:07 จะเพียงพอในกรณีนี้
domen

ขอให้เรายังคงอภิปรายนี้ในการแชท
domen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.