Сумма двух раз в формате H: M Linux Ubuntu - PullRequest
0 голосов
/ 24 декабря 2018

Я застрял в моем сценарии.У меня есть $time1: например "2:05" и $time2: "2:30"

Есть ли простой способ добавить эти два значения?и получаю $time3: "4:35", я пробовал много комбинаций с датой -d, но не могу ее решить.

edit: ок, вот как я решил:

EPOCH='jan 1 1970'
sum=0
for i in $var13 $var18
do
sum="$(date -u -d "$EPOCH $i" +%s) + $sum"
done
time9=$(echo $sum|bc) #time in seconds
time10=`date "-d@$time9" -u '+%H:%M'` #total time

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Вам может понадобиться настроить свой код с помощью Python

def split_time(timestr):
    h, m = timestr.split(':')
    return int(h), int(m)

time1 = "2:05"
time2 = "2:30"

t1 = split_time(time1)
t2 = split_time(time2)
m = (t1[1]+t2[1])%60
h = t1[0]+t2[0]+(t1[1]+t2[1])//60
print(f'{h}:{m}')

Вы также можете поместить функцию Python в скрипт и вызвать ее из bash:

def add_times(tstr1, tstr2):
    t1 = [int(x) for x in tstr1.split(':')]
    t2 = [int(x) for x in tstr2.split(':')]
    m = (t1[1]+t2[1])%60
    h = t1[0]+t2[0]+(t1[1]+t2[1])//60
    return f'{h}:{m}'

Вы можете сделатьТо же самое с использованием Bash, но вам нужно выполнить арифметику в Bash, который не является его силой.Смотри https://unix.stackexchange.com/questions/183178/how-to-sum-time-using-bash

0 голосов
/ 24 декабря 2018

Самый простой способ - сначала преобразовать обе длительности в секунды:

use strict;
use warnings;

sub parse_min_sec {
    my ($dur) = @_;
    my ($min, $sec) = $dur =~ /\A (\d+) : (\d+) \z/xa
        or die "$0: can't parse duration: $dur\n";
    return $min * 60 + $sec;
}

sub format_min_sec {
    my ($sec) = @_;
    return sprintf "%d:%02d", int($sec / 60), $sec % 60;
}

my $time1 = "2:05";
my $time2 = "2:30";
my $time3 = format_min_sec(parse_min_sec($time1) + parse_min_sec($time2));
print "Result: $time3\n";

Вывод:

Result: 4:35
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...