Làm thế nào để tôi tìm thấy giây kể từ nửa đêm?


11

Sử dụng datechương trình, làm thế nào tôi có thể tính số giây kể từ nửa đêm?


1
ngày "+ (% H * 60 +% M) * 60 +% S" | bc
groxxda

1
echo $ (($ (ngày '+ (% H * 60 +% M) * 60 +% S')))
groxxda

Câu trả lời:


14

Để tránh điều kiện chủng tộc, vẫn giả sử ngày GNU:

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

Với zsh, bạn có thể làm điều đó trong nội bộ:

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

Có thể, trong các múi giờ không có công tắc tiết kiệm ánh sáng ban ngày, bạn có thể làm:

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

Đây ${X#0}là loại bỏ các số 0 đứng đầu mà trong một số shell như thế bash, dashposhgây ra vấn đề với 09(trong đó shell phàn nàn về việc nó là một số bát phân không hợp lệ).


Rất thông minh và sử dụng tốt eval
Ulrich Dangel 25/07/14

Tôi muốn sử dụng một cái gì đó dọc theo những dòng này:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri

7

Không cần bất kỳ biểu thức số học nào, chỉ cần sử dụng ngày thuần túy:

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

Câu trả lời tuyệt vời, nên là một trong những đầu.
Leopoldo Sanchot 28/03/19

1
Trên máy Mac brew install coreutilsvà thay thế datebằnggdate
Connor McCormick

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.