Как узнать временной отрезок между текущей датой и прошлой (кол-во месяцев, годов)?

infinit

Client
Регистрация
02.04.2016
Сообщения
163
Реакции
13
Баллы
18
Всем привет!
Помогите с решением данной задачи, пожалуйста!

У меня есть даты в формате:

27.02.14
11.07.15
18.11.16
......
......
14.07.14

и т.д. Мне необходимо сравнить их с сегодняшней датой (допустим 23.03.2017) или могу вывести это в переменную и буду вписывать сегодняшнюю дату 23.03.17.

Как мне сравнить эти значения, чтобы на выходе получить кол-во месяцев, лет.
Пример:

23.03.17 - 27.02.14 = ? // (кол-во месяцев, лет)
 
  • Спасибо
Реакции: Mikhail B.
Помогите кто-то, пожалуйста, готов даже отблагодарить символической суммой))
 
Разница в днях
C#:
Развернуть Свернуть Копировать
DateTime oldDate = DateTime.Parse(project.Variables["OldDate"].Value);
DateTime nowDate = DateTime.Now;
TimeSpan ts = nowDate - oldDate;
return ts.Days;
 
  • Спасибо
Реакции: infinit
Разница в днях
C#:
Развернуть Свернуть Копировать
DateTime oldDate = DateTime.Parse(project.Variables["OldDate"].Value);
DateTime nowDate = DateTime.Now;
TimeSpan ts = nowDate - oldDate;
return ts.Days;

Предварительно передал глобальную переменную проекта "age" (значение: 27.02.14) в переменную кубика и вот конечный код:

Код:
Развернуть Свернуть Копировать
var oldDate = project.Variables["age"].Value;
DateTime oldDate = DateTime.Parse(project.Variables["oldDate"].Value);
DateTime nowDate = DateTime.Now;
TimeSpan ts = nowDate - oldDate;
return ts.Days;


Однако вот что получилось
809471f5a9114b879b861b87d370c91c.png
 
Пардон, поправил на такой вариант:

Код:
Развернуть Свернуть Копировать
DateTime oldDate = DateTime.Parse(project.Variables["age"].Value);
DateTime nowDate = DateTime.Now;
TimeSpan ts = nowDate - oldDate;
return ts.Days;


И результат:

upload_2017-3-23_14-10-25.png
 
А в переменной age есть вообще значение в формате, как в первом посте?
 
  • Спасибо
Реакции: infinit
А в переменной age есть вообще значение?

Да, было но по ошибке немного не тот формат был!
Теперь все работает!

upload_2017-3-23_14-14-47.png


Спасибо огромное!
Вопросик: как сделать return не в лог, а в переменную проекта, допустим "date_result"?
И чтобы потом была выгрузка из локальной переменной кубика C# в глобальную переменную проекта, спасибо!
 
return ts.Days;
замени на
project.Variables["date_result"].Value = ts.Days.ToString();
 
  • Спасибо
Реакции: infinit
По поводу глобальных переменных сюда.
 
  • Спасибо
Реакции: infinit
Выражаю огромную благодарность Dimionix и всем, кто поддержал в решении проблемы!
Всем хорошего дня! :az:
 
  • Спасибо
Реакции: copper12
А можете подсказать такой код только для минут. Чтобы реализовать следующее:

Проект зациклен внутри себя на N повторов.

Нужно записать время начала выполнения проекта. Потом время, когда прошел один из повторов в цикле. То есть, когда один из циклов успешно выполнен.

Далее нужно время, что ушло на выполнение проекта сравнить с заданным в настройках. И если оно меньше чем нужно (цикл выполнился быстрей), то подождать столько-то дополнительного времени. Если выполнился во время или даже дольше чем планировалось, то все ок и переходит к выполнению следующего цикла.

Запуск через планировщик тут не сработает. Так как, необходимо, чтобы проектор работал в цикле внутри себя, иначе не хватает ресурсов на нужное количество потоков, а сервер и так один из самых мощных.

Заранее спасибо за помощь!

Александр.
 
А можете подсказать такой код только для минут.
1. В начале выполнения проекта кладешь значение TickCount в переменную StartTime - переменная окружения {-Environment.TickCount-} или код
C#:
Развернуть Свернуть Копировать
return Environment.TickCount;
2. После цикла вставляешь кубик с кодом
C#:
Развернуть Свернуть Копировать
int refTime = int.Parse(project.Variables["RefTime"].Value) * 60 * 1000; // время, заданное в настройках
int startTime = int.Parse(project.Variables["StartTime"].Value); // время начала выполнения проекта
int endTime = Environment.TickCount; // время, когда прошел один из повторов в цикле

int elapsedTime = endTime - startTime; // вычисляем время, затраченное на выполнение проекта
// Сравниваем время, затраченное на выполнение проекта с временем, заданным в настройках, если оно больше, то "ok"
if (elapsedTime < refTime) {
    int pause = refTime - elapsedTime; // ...если меньше, то вычисляем время для паузы (время, заданное в настройках минус время, затраченное на выполнение проекта)
    Thread.Sleep(pause); // пауза
}
 
Последнее редактирование:
  • Спасибо
Реакции: Alexander I
1. В начале выполнения проекта кладешь значение TickCount в переменную StartTime - переменная окружения {-Environment.TickCount-} или код
C#:
Развернуть Свернуть Копировать
return Environment.TickCount;
2. После цикла вставляешь кубик с кодом
C#:
Развернуть Свернуть Копировать
int refTime = int.Parse(project.Variables["RefTime"].Value) * 60 * 1000; // время, заданное в настройках
int startTime = int.Parse(project.Variables["StartTime"].Value); // время начала выполнения проекта
int endTime = Environment.TickCount; // время, когда прошел один из повторов в цикле

int elapsedTime = endTime - startTime;
if (elapsedTime < refTime) {
    int pause = refTime - elapsedTime;
    Thread.Sleep(pause);
}

Огромное спасибо за помощь!

У меня вопрос про RefTime. Это переменная, в которой я указую сколько минут должен был выполнятся проект, правильно?
Например, 5 минут.

И если он выполнялся меньше 5 минут, то будет задержка пока не набереться 5 минут. А если проект выполнялся 5 минут и больше, то сразу пойдет новый цикл. Я правильно понял?

Заранее спасибо за разъяснения. Очень хотелось бы самому понять код, чтобы в дальнейшем не задавать глупых вопросов. :)

Александр.
 
  • Спасибо
Реакции: Dimionix
  • Спасибо
Реакции: Alexander I

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