ฉันจะหาวินาทีตั้งแต่เที่ยงคืนได้อย่างไร


11

เมื่อใช้dateโปรแกรมฉันจะคำนวณจำนวนวินาทีตั้งแต่เที่ยงคืนได้อย่างไร


1
วันที่ "+ (% H * 60 +% M) * 60 +% S" | bc
groxxda

1
echo $ (($ (วันที่ '+ (% H * 60 +% M) * 60 +% S'))))
groxxda

คำตอบ:


14

เพื่อหลีกเลี่ยงสภาพการแข่งขันยังคงสมมติว่าวันที่ GNU:

eval "$(date +'today=%F now=%s')"
midnight=$(date -d "$today 0" +%s)
echo "$((now - midnight))"

ด้วยzshคุณสามารถทำได้ภายใน:

zmodload zsh/datetime
now=$EPOCHSECONDS
strftime -s today %F $now
strftime -rs midnight %F $today
echo $((now - midnight))

ในเขตเวลาที่ไม่มีสวิตช์ปรับเวลาตามฤดูกาลคุณสามารถทำได้:

IFS=:
set -- $(date +%T)
echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))"

${X#0}คือการตัด 0s ชั้นนำที่อยู่ในเปลือกหอยบางอย่างเช่นbash, dashและposhทำให้เกิดปัญหากับ09(ที่เปลือกบ่นเกี่ยวกับมันเป็นตัวเลขฐานแปดไม่ถูกต้อง)


การใช้ eval ที่ฉลาดและดีมาก
Ulrich Dangel

ฉันอยากจะใช้บางสิ่งบางอย่างตามบรรทัดเหล่านี้:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri

7

ไม่จำเป็นต้องมีนิพจน์ทางคณิตศาสตร์ใด ๆ เพียงใช้ pure date:

date -d "1970-01-01 UTC $(date +%T)" +%s

คำตอบที่ดีควรเป็นคำตอบที่ดีที่สุด
Leopoldo Sanczyk

1
บน Mac brew install coreutilsและแทนที่dateด้วยgdate
Connor McCormick

2

ตามbash รับเวลาปัจจุบันเป็นมิลลิวินาทีตั้งแต่เที่ยงคืนบนระบบ GNU สามารถทำได้ดังนี้:

$ now=$(date '+%s')
$ midnight=$(date -d 'today 00:00:00' '+%s')
$ echo $(( now - midnight ))
53983

2
คุณต้องการให้แน่ใจว่าคุณไม่ทำอย่างนั้นเวลา 23:59:59
Stéphane Chazelas

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