Làm thế nào tôi có thể mất tổng số phút từ thời gian?


8

Hệ thống của tôi hiển thị thời gian như thế này 10:42 khi tôi nhập lệnh date +%R. Tôi cần phải mất tổng số phút của thời gian. Điều đó có nghĩa là như thế này 642 phút. Có lệnh hay shell script nào để hiển thị tổng thời gian tính bằng phút không?

Câu trả lời:


11

Để chỉ nhận được tổng số phút trong ngày, tôi sẽ sử dụng lệnh sau:

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

Thí dụ:

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

Bí quyết là định dạng dateđầu ra để cho phép bcdiễn giải và tính toán công thức.


2
Nếu bạn sử dụng echo $(date +"%H*60+%M") | bc, nó cũng hoạt động trong zsh;)
AB

@AB Một ngày nào đó tôi sẽ chuyển sangzsh
Sylvain Pineau

1
date "+%H*60+%M" | bccũng hoạt động tốt Có lẽ chỉ trong bất kỳ vỏ.
Chấn thương kỹ thuật số

@DigitalTrauma: Đơn giản, cảm ơn. Tôi đã cập nhật câu trả lời của mình cho phù hợp.
Sylvain Pineau

5

chỉ cần bash:

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

Buộc cả hai biến được coi là cơ số 10, để tránh các lỗi ném vỏ cho các số bát phân không hợp lệ 0809


Vâng, đó echo $(( $(date "+%k * 60 + 10#%M") ))là những gì tôi muốn nói
Chấn thương kỹ thuật số

1
Vâng, không có gì sai với điều đó. Có lẽ câu trả lời của tôi là một chút ... hướng dẫn
glenn jackman

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

Hoặc là

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

date +%l sẽ nhận được số giờ, nhân với 60 và thêm phút date +%M


2

Sử dụng datebash:

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

Thí dụ

$ 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

Sử dụng datevà vỏ z (zsh):

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

Thí dụ

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

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

1
@DineshDhananjayan Bạn có hài lòng với câu trả lời của tôi không? Sau đó cho tôi một upvote (∧). Nếu tôi có thể giải quyết vấn đề của bạn, thì thật tuyệt nếu bạn đánh dấu câu trả lời của tôi (✓). Askubfox.com/help/someone-answers ;)
AB

1
Tôi không nghĩ câu trả lời zsh của bạn là chính xác: IFS=: set -- $(date +%T); echo $1trả về 08:16:52- bạn sẽ cầnIFS=:; set ...
glenn jackman

@glennjackman Ups và cảm ơn bạn, đã sửa. : \
AB

1

Bạn không cần sử dụng IFS, bạn có thể làm theo cách này:

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

đầu ra là:

Total minutes: 593

Tôi đã sửa câu trả lời của bạn. Thông báo lỗi làbash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB
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.