Как добавить n часов к указанному времени?


15

Я хотел бы иметь время, скажем 6:45 утра, и добавить количество часов, скажем, 1,45 часа, чтобы привести к другому времени. Поэтому я хотел бы добавить 1,45 часа к 6:45 утра, чтобы получить другое время.

Есть ли для этого командная строка? Я немного погуглил, почитал справочную страницу dateи ничего подобного не нашел. wcalcкажется, не обрабатывать расчеты времени.

РЕДАКТИРОВАТЬ: 6 марта 2015 г. Это сценарий, в котором я использовал десятичные часы. Можно использовать некоторую проверку ошибок, чтобы убедиться, что HH: MM использует 2 цифры для часов.

#!/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"

Ответы:


27

Командная строка:

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

$now проведет время, указанное вами.

Вы можете поместить много вещей между "и"; как текущее время и добавить 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

Десятичные знаки не допускаются ...


Из комментариев: Чтобы получить ответ за 1,45 десятичных часов:

$ now=$(date -d "06:45 today + $((145 * 60 / 100)) minutes" +'%H:%M')
$ echo "$now:
8:12

Squeee! Спасибо! У меня были проблемы с чтением последней части, но часть вокруг% H:% M - это две одинарные кавычки. Есть ли способ сделать это в десятичных часах вместо преобразования в минуты? Это исключило бы шаг. Я бы даже был готов установить специальный калькулятор. Я ценю вашу работу, пожалуйста, не поймите меня неправильно.
камыш

«+10 дней» тоже работает. Так же как и «+2 часа». Конечно, вы также можете добавить метод, чтобы сделать минуты из 2,5 часов;) Я так и не нашел полный список слов, которые вы можете использовать ...
Rinzwind

@Bulrush хмм, без десятичных знаков с часом: D
Rinzwind

@Rinzwind Я не уверен, но ты пробовал 2:30 hourвместо 2.5 hour?
αғsнιη 24.12.14

1
@Rinzwind Так что одно возможное использование 2 hour + 30 minutes;)
αғsнιη
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.