Как прибавить время? Арифметика со временем.

trubiser

Client
Регистрация
02.12.2016
Сообщения
211
Благодарностей
14
Баллы
18
Всем привет.
Есть переменная со временем (11:12:21) Прошу подсказать как прибавить к этому времени 15 мин.
Если можно то прошу написать формулу:ah:
Спасибо!
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 470
Благодарностей
8 691
Баллы
113
Всем привет.
Есть переменная со временем (11:12:21) Прошу подсказать как прибавить к этому времени 15 мин.
Если можно то прошу написать формулу:ah:
Спасибо!
Здесь обсуждалось похожее:
Вместо AddDays используйте AddMinutes.
 
  • Спасибо
Реакции: trubiser

trubiser

Client
Регистрация
02.12.2016
Сообщения
211
Благодарностей
14
Баллы
18
Здесь обсуждалось похожее:
Вместо AddDays используйте AddMinutes.
Прошу подсказать:
Есть выражение: return TimeSpan.Parse("00:34:51").TotalSeconds.ToString(); которое переводит время ("00:34:51") в секунды.
Как в это выражение вставить переменную {-Variable.time-} в которой прописано время 00:34:51?
Заранее спасибо
 

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43
Я такую проблему решал так:

1. Фиксируем время и сохраняем в переменную:

53141

2. Регуляркой выкусываем минуты и сохраняем в переменную:

5314253143

3. Обработкой переменных прибавляем 15, в результате в переменной time_new становится 22 мин.; до этого было, разумеется, 7 мин.:

53144

53145

Как вставить новое значение минут в переменную data – полагаю, вы в курсе. :-)
 
  • Спасибо
Реакции: trubiser

trubiser

Client
Регистрация
02.12.2016
Сообщения
211
Благодарностей
14
Баллы
18
Нашел ответ на свой вопрос, как прибавить 15 мин ко времени:

C#:
// Переводим переменную {-Variable.time-} в строковую переменную "a" и конвертиуем время в секунды
string a = TimeSpan.Parse(project.Variables["time"].Value).TotalSeconds.ToString();
// конвертируем переменную "a" в тип int для сложения
int n = Convert.ToInt32(a);
// приюавляем ко времени 900 сек. (15 мин)
return n+900;
 

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43
А мой метод без С# разве плох? :-)

Вот эта переменная фиксирует новое время вместо старого:
{-TimeNow.Date hh:{-Variable.time_new-}:ss-}

53147

53148
 
  • Спасибо
Реакции: trubiser

trubiser

Client
Регистрация
02.12.2016
Сообщения
211
Благодарностей
14
Баллы
18
  • Спасибо
Реакции: Werti

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
  • Спасибо
Реакции: socsecret.ru и Valandersi

trubiser

Client
Регистрация
02.12.2016
Сообщения
211
Благодарностей
14
Баллы
18
Вот еще решение:
Если нужно подождать 30 мин (1800сек), но таймер включается позже заданного времени (и время включения таймера плавает).
{-Variable.time_post-} Время от которого нужно отсчитать 30 мин.

C#:
//Заданное Время от которого должен начаться отчет
// Переводим переменную {-Variable.time_post-} в строковую переменную "a" и конвертиуем время в секунды
string a = TimeSpan.Parse(project.Variables["time_post"].Value).TotalSeconds.ToString();
// конвертируем переменную "a" в тип int для сложения
int b = Convert.ToInt32(a);

// Получить текущее время
var x = DateTime.Now.ToString("hh:mm:ss tt");
// конвертируем время в секунды
var y = TimeSpan.Parse(x).TotalSeconds.ToString();
int z = Convert.ToInt32(y);

return 1800-(z-b);
К примеру я получаю емейл и мне нужно подождать 30 мин с момента прихода письма (02:40:00). Парсер писем проверяет письма раз в 5 мин. и обнаружил письмо в 02:44:00.
Этот экшн позволяет ждать 30 мин от 02:40:00.
Результат выдается в секундах
 

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
Работать будет превосходно. 8-)
Поверите на слово, или привести подробные скрины? :-)
Дак ты привёл уже. Вот они

Посмотреть вложение 53147

Посмотреть вложение 53148

И по ним хорошо видно, что всё пойдёт не так, если на момент вычислений времени будет 45+ минут
 

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43
епать, колотить.... зачем все это , если все делается одной строкой кода ? o_O
Ну меня обвинили в неправильности шаблона. :-) Если бы я был по национальности японец - то я бы вынужден был бы, для спасения своего честного имени - сделать себе харакири. :ap: Но я выбрал другой путь - проиллюстрировал, что и шаблоном эту задачу можно решить. :-)
 

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
никто не спорит, что можно. Можно и лбом гвозди забивать. Вопрос в целесообразности.

Ну а раз уж хочется такие задачи решать шаблоном - советую распаршенное время сразу перегонять в минимальные еденицы и работать уже с ними. Не нужны будут условия и т.д.
 

trubiser

Client
Регистрация
02.12.2016
Сообщения
211
Благодарностей
14
Баллы
18
Вот еще решение:
Если нужно подождать 30 мин (1800сек), но таймер включается позже заданного времени (и время включения таймера плавает).
{-Variable.time_post-} Время от которого нужно отсчитать 30 мин.
Это мое решение дает сбои. Добрый человек дал такое решение сравнения времени, которое подошло мне.
Скрипт проверяет прошло ли 24 часа от заданной даты.

C#:
var datetime_start = "12/03/2018 23:00:00"; // project.Variables["time_start"].Value;
var datetime_utc = DateTime.Parse(datetime_start).ToUniversalTime();
double hours = 24; //double.Parse(project.Variables["hours"].Value);
bool time_comparison = datetime_utc.AddHours(hours) < DateTime.UtcNow;
if (time_comparison)
{
    return hours+" час(ов) прошло с "+datetime_start;;
}
else
{
    return hours+" час(ов) не прошло с "+datetime_start;
    //если надо по false выйти:
    //throw new Exception (hours+" час(ов) не прошло c "+datetime_start);
}
 
Последнее редактирование:
  • Спасибо
Реакции: Hannes

trubiser

Client
Регистрация
02.12.2016
Сообщения
211
Благодарностей
14
Баллы
18
А в этом скрипте производится сравнение времени. Какое время (дата) позднее.

C#:
// Присваиваем переменным stringTime1, stringTime2
// строковые значения из проекта
string stringTime1 = project.Variables["time1"].Value;
string stringTime2 = project.Variables["time2"].Value;

// Здесь объявляем переменные с нужным нам типом времени DateTime
DateTime time1, time2;

// Преобразовываем строковой тип времени в тип DateTime
bool compareTime1 = DateTime.TryParse(stringTime1, out time1);
bool compareTime2 = DateTime.TryParse(stringTime2, out time2);

// Вначале проверяем корректность преобразования
// если ошибка то переходим на красную ветку
if (compareTime1 && compareTime2)
{
    if (time1 > time2) // сравниваем два значения времени
    {
        return 1; // для примера здесь возвращаем 1
    }
    else
    {
        return 2;// для примера здесь возвращаем 2
    }
}
else
{
    return null; // завершаем сниппет с ошибкой
}
 
  • Спасибо
Реакции: Hannes

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
Вот еще решение:
Если нужно подождать 30 мин (1800сек), но таймер включается позже заданного времени (и время включения таймера плавает).
{-Variable.time_post-} Время от которого нужно отсчитать 30 мин.

C#:
//Заданное Время от которого должен начаться отчет
// Переводим переменную {-Variable.time_post-} в строковую переменную "a" и конвертиуем время в секунды
string a = TimeSpan.Parse(project.Variables["time_post"].Value).TotalSeconds.ToString();
// конвертируем переменную "a" в тип int для сложения
int b = Convert.ToInt32(a);

// Получить текущее время
var x = DateTime.Now.ToString("hh:mm:ss tt");
// конвертируем время в секунды
var y = TimeSpan.Parse(x).TotalSeconds.ToString();
int z = Convert.ToInt32(y);

return 1800-(z-b);
К примеру я получаю емейл и мне нужно подождать 30 мин с момента прихода письма (02:40:00). Парсер писем проверяет письма раз в 5 мин. и обнаружил письмо в 02:44:00.
Этот экшн позволяет ждать 30 мин от 02:40:00.
Результат выдается в секундах
Подскажите, есть ли вариант плюсуем время к примеру из переменой взять текущее время и прибавить к нему 10 минут, на выходе получить переменную с + 10 минут, более точный пример, сейчас 10:00 плюсуем 10, время в переменной становится 10:10
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
работа со временем, очень рекомендую работать в unixtime, очень удобно там все посекундно.
перевел любое время/дату unixtime и прибавляй, отнимай, очень удобно работать с секундами
 

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
работа со временем, очень рекомендую работать в unixtime, очень удобно там все посекундно.
перевел любое время/дату unixtime и прибавляй, отнимай, очень удобно работать с секундами
Не совсем понял уточните? Где найти unixtime? это кубик? Код?

Доп: Понял. не совсем то что нужно, просто прибавить время надо, записать в файл и когда время придет запустить шаблон
 
Последнее редактирование:

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)