ฉันจะใช้เวลาทั้งหมดเป็นนาทีได้อย่างไร


8

ระบบของฉันแสดงเวลาเช่นนี้ 10:42 date +%Rป้อนข้อมูลเมื่อฉันสั่ง ฉันต้องใช้เวลาทั้งหมดเป็นนาที นั่นหมายความว่าอย่างนี้ 642 นาที มีคำสั่งหรือเชลล์สคริปต์สำหรับแสดงเวลาทั้งหมดในหน่วยนาทีหรือไม่?

คำตอบ:


11

หากต้องการรับนาทีทั้งหมดของวันฉันจะใช้คำสั่งต่อไปนี้:

$ date "+%H*60+%M" | bc

ตัวอย่าง:

$ date +%R
09:30
$ date "+%H*60+%M" | bc
570

เคล็ดลับคือการจัดรูปแบบdateผลลัพธ์เพื่อให้bcสามารถตีความและคำนวณสูตรได้


2
ถ้าคุณใช้echo $(date +"%H*60+%M") | bcมันใช้งานได้ใน zsh;)
AB

@AB วันหนึ่งฉันจะสลับไปที่zsh
Sylvain Pineau

1
date "+%H*60+%M" | bcทำงานได้ดีเช่นกัน อาจอยู่ในเกือบทุกเชลล์
Digital Trauma

@ DigitalTrauma: ง่ายขอบคุณ ฉันอัพเดตคำตอบแล้ว
Sylvain Pineau

5

แค่ทุบตี:

IFS=: read hour min < <(date +%R)
echo $(( 60 * 10#$hour + 10#$min ))

การบังคับให้ตัวแปรทั้งสองให้ถือว่าเป็น base-10 เพื่อหลีกเลี่ยงข้อผิดพลาดในการขว้างปาเชลล์สำหรับหมายเลขฐานแปดที่ไม่ถูกต้อง08และ09


ใช่echo $(( $(date "+%k * 60 + 10#%M") ))ฉันหมายถึงอะไร
Digital Trauma

1
ใช่ไม่มีอะไรผิดปกติกับที่ บางทีคำตอบของฉันอาจจะมากกว่านั้น ... คำแนะนำ
เกล็นแจ็

3
date +%R | awk -F ":" '{print ($1 * 60) + $2}'

หรือ

 echo $((($(date +%l) * 60 ) + $(date +%M)))

date +%l จะได้รับชั่วโมงคูณด้วย 60 และเพิ่มนาที date +%M


2

การใช้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

1
@DineshDhananjayan คุณพอใจกับคำตอบของฉันหรือยัง? จากนั้นให้ฉัน upvote (∧) ถ้าฉันสามารถแก้ปัญหาของคุณได้มันคงจะดีถ้าคุณทำเครื่องหมายคำตอบของฉัน (✓) askubuntu.com/help/someone-answers ;)
AB

1
ฉันไม่คิดว่าคำตอบ zsh ของคุณถูกต้อง: IFS=: set -- $(date +%T); echo $1ส่งคืน08:16:52- คุณจะต้องIFS=:; set ...
เกล็นแจ็

@glennjackman Ups และขอขอบคุณแก้ไข : \
AB

1

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