bagaimana saya bisa mengambil menit total dari waktu?

8

Sistem saya menampilkan waktu seperti ini 10:42 ketika saya memasukkan perintah date +%R. Saya perlu mengambil total menit waktu. Itu artinya 642 menit. Apakah ada perintah atau skrip shell untuk menampilkan waktu total dalam hitungan menit?

Dinesh Dhananjayan
sumber

Jawaban:

11

Untuk hanya mendapatkan total menit dalam sehari, saya akan menggunakan perintah berikut:

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

Contoh:

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

Caranya adalah memformat dateoutput untuk memungkinkan bcuntuk menafsirkan dan menghitung formula.

Sylvain Pineau
sumber
2
Jika Anda menggunakannya echo $(date +"%H*60+%M") | bc, ini juga berfungsi di zsh;)
AB
@ AB Suatu hari saya akan beralih kezsh
Sylvain Pineau
1
date "+%H*60+%M" | bcbekerja dengan baik juga. Mungkin di hampir semua shell.
Trauma Digital
@DigitalTrauma: Sederhana, terima kasih. Saya telah memperbarui jawaban saya sesuai dengan itu.
Sylvain Pineau
5

hanya bash:

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

Memaksa kedua variabel untuk diperlakukan sebagai basis-10, untuk menghindari kesalahan melempar shell untuk angka oktal yang tidak valid 08dan09

glenn jackman
sumber
Ya, echo $(( $(date "+%k * 60 + 10#%M") ))itulah yang ingin saya katakan
Digital Trauma
1
Ya tidak ada yang salah dengan itu. Mungkin jawaban saya sedikit lebih ... instruksional
glenn jackman
3
date +%R | awk -F ":" '{print ($1 * 60) + $2}'

Atau

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

date +%l akan mendapatkan jam, kalikan dengan 60 dan tambahkan menit date +%M

7171u
sumber
2

Menggunakan datedan bash:

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

Contoh

$ 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

Menggunakan datedan z-shell (zsh):

IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"

Contoh

% date
Fr 10. Jul 08:40:53 CEST 2015

% IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
520
AB
sumber
1
@DineshDhananjayan Apakah Anda puas dengan jawaban saya? Kemudian beri saya upvote (∧). Jika saya dapat memecahkan masalah Anda, maka alangkah baiknya jika Anda menandai jawaban saya (✓). askubuntu.com/help/someone-answers ;)
AB
1
Saya tidak berpikir jawaban zsh Anda benar: IFS=: set -- $(date +%T); echo $1pengembalian 08:16:52- Anda akan perluIFS=:; set ...
glenn jackman
@glennjackman Ups dan terima kasih, dikoreksi. : \
AB
1

Anda tidak perlu menggunakan IFS, Anda bisa melakukannya dengan cara ini:

date=$(date +'%l:%M')
read H M <<< ${date//[-: ]/ }
echo  "Total minutes: $(($H * 60 + $M))"

output adalah:

Total minutes: 593
Maythux
sumber
Saya sudah mengoreksi jawaban Anda. Pesan kesalahannya adalahbash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB