เป็นวิธีที่ชาญฉลาดในการนับจำนวนวันตั้งแต่ X อะไร


11

ฉันเริ่มทำงานที่ตำแหน่งปัจจุบันของฉันตั้งแต่วันที่ 17 พฤศจิกายน 2014 ฉันอยากจะรู้ว่าตอนนี้ทำงานได้กี่วัน มีความคิดเห็นเกี่ยวกับวิธีการใช้งาน Linux เพื่อหาทางออกที่ง่ายและดีหรือไม่?


ฉันทำสิ่งที่คล้ายกันในสคริปต์ Perl ฉันใช้ฟังก์ชัน timelocal () เพื่อรับจำนวนวินาทีจากยุคจนถึงวันที่ที่กำหนด (ตัวอย่างเช่น 17 พฤศจิกายน 2014) จากนั้นลบออกจาก epoch-date-in-seconds ปัจจุบันแล้วหารด้วย 86400 (วินาทีใน วันหนึ่ง). ฉันแน่ใจว่าคนที่จะผ่านเข้ามาด้วยวิธีที่เปลือกเท่านั้น :)
เจฟฟ์ Schaller

2
เลขคณิตเวลามีจำนวนกรณีพิเศษเที่ยวยุ่งยิ่ง ในขณะที่สิ่งง่าย ๆ เช่นการลบการประทับเวลา UNIX และการหารด้วย 86,400 จะให้คำตอบโดยประมาณคุณจะดีกว่าถ้าใช้dateutilไลบรารี่พิเศษที่คำนึงถึงกรณีพิเศษเช่น Python
Reid

1
คำตอบบางส่วนในการคำนวณความแตกต่างวันที่อย่างรวดเร็วอาจช่วยได้ที่นี่เช่นกัน
จัดการ


@ msh210 คุณถูกแบนตลอดชีวิตและถูกตัดสินจำคุกเป็นเวลา 1 เดือนในขณะที่ให้บริการชุมชนในการทำความสะอาดรหัสสำหรับรหัสภาษาโคบอลโบราณ
ychaouche

คำตอบ:


14
echo $(( (`date +%s` - `date +%s -d '2014/11/17'`) / 86400 )) days ago

4
สิ่งนี้ทำให้การเผ่นวินาทีผิด ฉันหมายความว่ามันแทบจะไม่สำคัญในขณะนี้แต่ใน10k ปีหรือมากกว่านั้นข้อผิดพลาดสะสมอาจเพียงพอที่จะสำคัญ
Kevin

2
วินาทีเผ่นน่าจะเป็นจะก่อให้เกิดข้อผิดพลาดในประมาณ. 000001% นี้เป็นเล็กน้อยเมื่อเทียบกับจำนวนที่ไม่ถูกต้องของวันวิธีนี้จะให้กับสถานที่เวลาตามฤดูกาลเป็นที่สังเกต: 2% ของกรณีที่ ...
jlliagre

2
@Kevin: ถ้าเขาต้องการทราบว่าเขาทำงานที่ไหนสักกี่วันเราสามารถ (จนกว่าจะก้าวหน้าในการแช่แข็งหรือยา) ไม่ต้องกังวลกับเรื่องนี้มากนัก ^^
Olivier Dulac

1
@jlliagre:% s เป็นเวลา Unix ซึ่งเป็น UTC เสมอซึ่งไม่มี DST
Kevin

1
โอกาสที่เขาจะสงสัยเกี่ยวกับจำนวนวันที่ทำงานในขณะที่ไม่ทำงานหลังโต๊ะทำงาน เนื่องจากอาจไม่ใช่ประมาณเที่ยงคืน แต่อยู่ระหว่าง 8.00 น. ถึง 17.00 น. (และdate -d 2014/11/17ให้เวลาเที่ยงคืนเนื่องจากไม่มีเวลากล่าวถึง) DST ไม่สำคัญ
wurtel

5

บนใบหน้าของมัน:

$ date --date="-239 days"
Mon Nov 17 15:25:40 CET 2014

ในสคริปต์ (ไม่มีประสิทธิภาพมาก แต่ ... อาจจะใช้เวลาในการกระโดดไม่กี่วินาที?;))

i=0
result=""
while [ "$result" != "20141117" ]
do
    i=$((i+1))
    result=$(date --date="-$i days" +%Y%m%d)
done
echo "$i" days have passed since "$result"

แม้agoเป็นที่เข้าใจกัน:date --date="239 days ago"
บาดเจ็บทางดิจิตอล

1
@DigitalTrauma เลวร้ายเกินไปมันไม่ได้แปลเป็ เช่นLC_ALL=ru_RU.utf8 date --date="239 дней назад"ให้ผลลัพธ์แบบเดียวกับdate --date="239"ฉัน
Ruslan

@Ruslan แน่นอน :)
Digital Trauma

1

ฉันลองหลามบนบรรทัดคำสั่ง

$ python -c "import datetime; print datetime.date.today() - datetime.date(2014,11,17)"
246 days, 0:00:00 

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