Como adicionar n horas a um horário especificado?

15

Gostaria de ter um tempo, digamos 6h45, e adicionar uma quantidade de horas, digamos 1,45 horas, para resultar em outro horário. Então, eu gostaria de adicionar 1,45 horas às 6:45 da manhã para ter outra hora.

Existe uma linha de comando utile para isso? Eu pesquisei no Google e li a página de manual datee não encontrei nada parecido. wcalcparece não lidar com cálculos de tempo.

Edição: 6 de março de 2015. Esse é o script que eu terminei para usar horas decimais. Poderia usar alguma verificação de erro para garantir que o HH: MM use 2 dígitos para as horas.

#!/bin/bash
# Mar 6, 2015
# Add decimal hours to given time. 
# Syntax: timeadd HH:MM HOURS
# There MUST be 2 digits for the hours in HH:MM.
# Times must be in military time. 
# Ex: timeadd 05:51 4.51
# Ex: timeadd 14:12 2.05
echo " "
# If we have less than 2 parameters, show instructions and exit.
if [ $# -lt 2 ]
then
    echo "Usage: timeadd HH:MM DECHOURS"
    exit 1
fi
intime=$1
inhours=$2
# Below is arithmetic expansion $(())
# The bc calculator is standard on Ubuntu. 
# Below rounds to the minute. 
inminutes=$(echo "scale=0; ((($inhours * 60)*10)+5)/10" | bc)
echo "inminutes=$inminutes"
now=$(date -d "$intime today + $inminutes minutes" +'%H:%M')
echo "New time is $now"
Junco
fonte

Respostas:

26

Linha de comando:

$ now=$(date -d "06:45 today + 105 minutes" +'%H:%M')
$ echo "$now"
08:30

$now manterá o tempo especificado.

Você pode colocar muitas coisas entre o "e"; como a hora atual e adicione 105 a ela.


$now=$(date -d "06:45 today + 2.5 hour" +'%H:%M')
date: invalid date `06:45 today + 2.5 hour'
$now=$(date -d "06:45 today + 2:30 hour" +'%H:%M')
date: invalid date `06:45 today + 2:30 hour'
$ now=$(date -d "06:45 today + 2 hour" +'%H:%M')
$ echo "$now"
08:45

Não são permitidos decimais ...


Dos comentários: para obter a resposta para 1,45 horas decimais:

$ now=$(date -d "06:45 today + $((145 * 60 / 100)) minutes" +'%H:%M')
$ echo "$now:
8:12
Rinzwind
fonte
Squeee! Obrigado! Ocorreu um problema ao ler a última parte, mas a parte em torno de% H:% M são duas aspas simples. Existe alguma maneira de fazer isso em horas decimais em vez de convertê-lo em minutos? Isso eliminaria um passo. Eu estaria aberto a instalar uma calculadora especial. Eu aprecio o seu trabalho, por favor, não entenda mal.
Bulrush
"+10 dias" também funciona. O mesmo acontece com "+2 horas". Claro que você também pode adicionar um método aqui para fazer minutos de 2,5 horas;) Eu nunca encontrei uma lista completa de palavras que você pode usar ...
Rinzwind
@Bulrush hmm não são permitidos decimais com hora: D
Rinzwind
@Rinzwind Não tenho certeza, mas você tentou em 2:30 hourvez de 2.5 hour?
αғsнιη
1
@Rinzwind Assim, uma possível está usando 2 hour + 30 minutes;)
αғsнιη