ระบบของฉันแสดงเวลาเช่นนี้ 10:42
date +%R
ป้อนข้อมูลเมื่อฉันสั่ง ฉันต้องใช้เวลาทั้งหมดเป็นนาที นั่นหมายความว่าอย่างนี้ 642 นาที มีคำสั่งหรือเชลล์สคริปต์สำหรับแสดงเวลาทั้งหมดในหน่วยนาทีหรือไม่?
ระบบของฉันแสดงเวลาเช่นนี้ 10:42
date +%R
ป้อนข้อมูลเมื่อฉันสั่ง ฉันต้องใช้เวลาทั้งหมดเป็นนาที นั่นหมายความว่าอย่างนี้ 642 นาที มีคำสั่งหรือเชลล์สคริปต์สำหรับแสดงเวลาทั้งหมดในหน่วยนาทีหรือไม่?
คำตอบ:
หากต้องการรับนาทีทั้งหมดของวันฉันจะใช้คำสั่งต่อไปนี้:
$ date "+%H*60+%M" | bc
ตัวอย่าง:
$ date +%R
09:30
$ date "+%H*60+%M" | bc
570
เคล็ดลับคือการจัดรูปแบบdate
ผลลัพธ์เพื่อให้bc
สามารถตีความและคำนวณสูตรได้
zsh
date "+%H*60+%M" | bc
ทำงานได้ดีเช่นกัน อาจอยู่ในเกือบทุกเชลล์
แค่ทุบตี:
IFS=: read hour min < <(date +%R)
echo $(( 60 * 10#$hour + 10#$min ))
การบังคับให้ตัวแปรทั้งสองให้ถือว่าเป็น base-10 เพื่อหลีกเลี่ยงข้อผิดพลาดในการขว้างปาเชลล์สำหรับหมายเลขฐานแปดที่ไม่ถูกต้อง08
และ09
echo $(( $(date "+%k * 60 + 10#%M") ))
ฉันหมายถึงอะไร
date +%R | awk -F ":" '{print ($1 * 60) + $2}'
หรือ
echo $((($(date +%l) * 60 ) + $(date +%M)))
date +%l
จะได้รับชั่วโมงคูณด้วย 60 และเพิ่มนาที date +%M
การใช้date
และbash
:
eval "$(date +'today=%F now=%s')"; midnight=$(date -d "$today 0" +%s);echo "$(((now - midnight) / 60))"
ตัวอย่าง
$ date
Fr 10. Jul 08:45:05 CEST 2015
$ eval "$(date +'today=%F now=%s')"; midnight=$(date -d "$today 0" +%s);echo "$(((now - midnight) / 60))"
525
การใช้date
และ z-shell (zsh):
IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
ตัวอย่าง
% date
Fr 10. Jul 08:40:53 CEST 2015
% IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
520
IFS=: set -- $(date +%T); echo $1
ส่งคืน08:16:52
- คุณจะต้องIFS=:; set ...
คุณไม่จำเป็นต้องใช้ IFS คุณสามารถทำได้ด้วยวิธีนี้:
date=$(date +'%l:%M')
read H M <<< ${date//[-: ]/ }
echo "Total minutes: $(($H * 60 + $M))"
ผลลัพธ์คือ:
Total minutes: 593
bash: 9 17*60+: syntax error in expression (error token is "17*60+")
echo $(date +"%H*60+%M") | bc
มันใช้งานได้ใน zsh;)