Jak dodać n godzin do określonego czasu?

15

Chciałbym mieć trochę czasu, powiedzmy 6:45, i dodać ilość godzin, powiedzmy 1,45 godziny, aby uzyskać inny czas. Więc chciałbym dodać 1,45 godziny do 6:45 rano, aby uzyskać inny czas.

Czy jest do tego użyteczna linia poleceń? Zrobiłem trochę googlingu i przeczytałem stronę podręcznika użytkownika datei nic takiego nie znalazłem. wcalcwydaje się nie obsługiwać obliczeń czasu.

EDYCJA: 6 marca 2015. To jest skrypt, w którym skończyłem, aby używać godzin dziesiętnych. Przydałoby się sprawdzenie błędów, aby upewnić się, że GG: MM używa 2 cyfr godziny.

#!/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"
Sitowie
źródło

Odpowiedzi:

27

Wiersz poleceń:

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

$now utrzyma określony czas.

Możesz wstawić wiele rzeczy pomiędzy „i”; jak bieżący czas i dodaj do niego 105.


$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

Niedozwolone są miejsca po przecinku ...


Z komentarzy: Aby uzyskać odpowiedź na 1,45 godziny po przecinku:

$ now=$(date -d "06:45 today + $((145 * 60 / 100)) minutes" +'%H:%M')
$ echo "$now:
8:12
Rinzwind
źródło
Squeee! Dziękuję Ci! Miałem problem z odczytaniem ostatniej części, ale część wokół% H:% M to dwa pojedyncze cudzysłowy. Czy można to zrobić w godzinach dziesiętnych zamiast konwertować je na minuty? To by wyeliminowało krok. Byłbym nawet otwarty na zainstalowanie specjalnego kalkulatora. Doceniam twoją pracę, proszę, nie zrozum mnie źle.
Sitowie
Działa również „+10 dni”. Podobnie jak „+2 godzina”. Oczywiście możesz również dodać tutaj metodę tworzenia minut od 2,5 godziny;) Nigdy nie znalazłem pełnej listy słów, których możesz użyć ...
Rinzwind
@Bulrush hmm niedozwolone są miejsca dziesiętne z godziną: D
Rinzwind
@Rinzwind Nie jestem pewien, ale próbowałeś 2:30 hourzamiast 2.5 hour?
αғsнιη
1
@Rinzwind Tak możliwe jest użycie 2 hour + 30 minutes;)
αғsнιη