Как сравнить две даты?

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
прочитал ветку но не дошло.((( имею дату в формате {-TimeNow.Дата-} 12/20/2016 как мне получить разницу в количестве днях от текущей даты?
C#:
string date = project.Variables["Date"].Value;
DateTime oldDate = DateTime.ParseExact(date, "MM/dd/yyyy", null);
DateTime nowDate = DateTime.Now;
TimeSpan ts = nowDate - oldDate;
return ts.Days;
 
  • Спасибо
Реакции: udder и ZSHab

rokoko

Client
Регистрация
18.03.2017
Сообщения
5
Благодарностей
0
Баллы
1
Добрый день!
А как вывести разницу в таком формате: часы, минуты, секунды? Например: 00.15.23. Сейчас просто секунды выводятся - 914

upload_2017-4-2_16-50-20.png
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Добрый день!
А как вывести разницу в таком формате: часы, минуты, секунды? Например: 00.15.23. Сейчас просто секунды выводятся - 914]
Вместо return Math.Floor(diff.TotalSeconds);
написать return diff;
 
  • Спасибо
Реакции: rokoko

rokoko

Client
Регистрация
18.03.2017
Сообщения
5
Благодарностей
0
Баллы
1

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Спасибо, все ок! А так можно еще: день, часы, минуты, секунды?
C#:
return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", diff.Days, diff.Hours, diff.Minutes, diff.Seconds);
Вместо двоеточий можно указать любые свои разделители.
Вместо "00" можно написать по одному нулю, в зависимости от того, в каком формате нужен результат.
 
  • Спасибо
Реакции: rokoko

socsecret.ru

Client
Регистрация
30.09.2017
Сообщения
346
Благодарностей
209
Баллы
43
У меня есть две даты. Одна текущая {-TimeNow.Date dd.MM.yyyy hh.mm-}
Другая просто записанная в виде текста в переменной в том же формате, например 28.06.2018 20.46
Каким образом сравнить эти две даты? В предыдущих примерах не смог понять. Я так понимаю, что нужно текстовую дату как-то перевести в спецформат, понимаемый C# либо JS, и потом соответственно в C# либо JS делать сравнение. Но чёт не выходит... Да ещё к тому же {-TimeNow.Date dd.MM.yyyy hh.mm-} возвращает на 12 часов меньше, чем должно быть.
 

catol

Client
Регистрация
05.07.2012
Сообщения
278
Благодарностей
98
Баллы
28
У меня в проектах всё работает относительно {-TimeNow.UnixTime-}.

Простыми словами я беру {-TimeNow.UnixTime-} сохраняю в переменную - это время в секундах с 1 января 1970 года.

Потом обычным математическим действием на С# определяю прошло ли нужное время в секундах, а если нужно наглядно посмотреть сколько прошло то / 60 минуты / 60 часы / 24 дни.

А если нужно переводить даты в Unix и обратно.

Если конвертировать строку в число.
 
Последнее редактирование:
  • Спасибо
Реакции: obyavkaby и socsecret.ru

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113
Да ещё к тому же {-TimeNow.Date dd.MM.yyyy hh.mm-} возвращает на 12 часов меньше, чем должно быть.
Для вывода времени в 24 часовом формате: {-TimeNow.Date dd.MM.yyyy HH.mm-}
{-TimeNow.Date dd.MM.yyyy hh.mm-} для 12 часового формата..
 
  • Спасибо
Реакции: socsecret.ru

vikcoint

Client
Регистрация
31.10.2016
Сообщения
13
Благодарностей
5
Баллы
3
У меня есть две даты. Одна текущая {-TimeNow.Date dd.MM.yyyy hh.mm-}
Другая просто записанная в виде текста в переменной в том же формате, например 28.06.2018 20.46
Каким образом сравнить эти две даты? В предыдущих примерах не смог понять. Я так понимаю, что нужно текстовую дату как-то перевести в спецформат, понимаемый C# либо JS, и потом соответственно в C# либо JS делать сравнение. Но чёт не выходит... Да ещё к тому же {-TimeNow.Date dd.MM.yyyy hh.mm-} возвращает на 12 часов меньше, чем должно быть.
У вас получилось разобраться?
 

socsecret.ru

Client
Регистрация
30.09.2017
Сообщения
346
Благодарностей
209
Баллы
43
У вас получилось разобраться?
Более-менее да. Сначала заменой привожу даты в формат {-TimeNow.Date-} - именно такой, другой не сработает. Кладу полученную дату в переменную tmp.
Затем в C# пишу следующий код для получения разницы между текущей датой и той, что лежит в переменной. Делю на 3600000, чтобы результат был визуально удобный, часах:
Код:
var dateBlock = new Date("{-Variable.tmp-}");
var dateNow = new Date("{-TimeNow.Date-}");
var date = (dateNow - dateBlock)/3600000;
Результат кладу в какую-нибудь переменную, можно в ту же самую tmp, и дальше с помощью кубика IF выясняю то, что мне нужно. Например, если мне надо, чтобы между датами был как минимум месяц, то я указываю {-Variable.tmp-}>744.
 

obyavkaby

Client
Регистрация
26.05.2017
Сообщения
187
Благодарностей
17
Баллы
18
Здравствуйте.
Помогите разобраться.
Пробую применить указанный выше способ

Код:
DateTime date = Convert.ToDateTime (progect.varables["time2"].value);
DateTime date1 = Convert.ToDateTime (progect.varables["time1"].value);
TimeSpan diff = date1 - date;
return Math.Floor(diff.TotalSeconds);
но при выполнении идут ошибки.

Screenshot_4.jpg
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Здравствуйте.
Помогите разобраться.
Пробую применить указанный выше способ

Код:
DateTime date = Convert.ToDateTime (progect.varables["time2"].value);
DateTime date1 = Convert.ToDateTime (progect.varables["time1"].value);
TimeSpan diff = date1 - date;
return Math.Floor(diff.TotalSeconds);
но при выполнении идут ошибки.

Посмотреть вложение 35362
во-первых, там должен быть project. Во-вторых, тебя не смущает, что код на 4 строки, а у тебя ошибки в 90й строке например? Телепатов нема
 
  • Спасибо
Реакции: obyavkaby

obyavkaby

Client
Регистрация
26.05.2017
Сообщения
187
Благодарностей
17
Баллы
18
Я искал решение задачи и переписал так как у человека написано, он же свой пример выложил, значит у него работает, а у меня ошибки, вот и спрашиваю причину.
 

Вложения

  • 14,2 КБ Просмотры: 165

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
progect
project
 

obyavkaby

Client
Регистрация
26.05.2017
Сообщения
187
Благодарностей
17
Баллы
18
поправил но все равно выдает ошибку
"
Компиляция кода Ошибка в действии "CS1061" "'ZennoLab.InterfacesLibrary.ProjectModel.ILocalVariable' does not contain a definition for 'value' and no extension method 'value' accepting a first argument of type 'ZennoLab.InterfacesLibrary.ProjectModel.ILocalVariable' could be found (are you missing a using directive or an assembly reference?)". [Строка: 1; Cтолбец: 65]

Компиляция кода Ошибка в действии "CS1061" "'ZennoLab.InterfacesLibrary.ProjectModel.ILocalVariable' does not contain a definition for 'value' and no extension method 'value' accepting a first argument of type 'ZennoLab.InterfacesLibrary.ProjectModel.ILocalVariable' could be found (are you missing a using directive or an assembly reference?)". [Строка: 1; Cтолбец: 65]
"
 

Вложения

  • 14,3 КБ Просмотры: 159

obyavkaby

Client
Регистрация
26.05.2017
Сообщения
187
Благодарностей
17
Баллы
18

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113
Здравствуйте.
Помогите разобраться.
Пробую применить указанный выше способ

Код:
DateTime date = Convert.ToDateTime (progect.varables["time2"].value);
DateTime date1 = Convert.ToDateTime (progect.varables["time1"].value);
TimeSpan diff = date1 - date;
return Math.Floor(diff.TotalSeconds);
но при выполнении идут ошибки.

Посмотреть вложение 35362
Неправильно набрано, нужно: project
К тому же Variables и Value в нижнем регистре у вас.
И Variables - с ошибкой записано было.

upload_2019-1-18_23-54-16.png


C#:
DateTime date = Convert.ToDateTime (project.Variables["time2"].Value);
DateTime date1 = Convert.ToDateTime (project.Variables["time1"].Value);
TimeSpan diff = date1 - date;
return Math.Floor(diff.TotalSeconds);
upload_2019-1-19_0-0-33.png
 
Последнее редактирование:
  • Спасибо
Реакции: maxim.gutareff и obyavkaby

obyavkaby

Client
Регистрация
26.05.2017
Сообщения
187
Благодарностей
17
Баллы
18
Неправилдьно набрано, нужно: project
К тому же Variables и Value в нижнем регистре у вас.
И Variables - с ошибкой записано было.

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

C#:
DateTime date = Convert.ToDateTime (project.Variables["time2"].Value);
DateTime date1 = Convert.ToDateTime (project.Variables["time1"].Value);
TimeSpan diff = date1 - date;
return Math.Floor(diff.TotalSeconds);
Спасибо. Может учебник какой по С# подскажете.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Всем привет.
Взял код из ветки, задал даты в формате, который понимает система. Первая дата у меня: 29.08.03 9:00 и вторая 29.07.30 10:44
Почему-то и в этом случае: 29.07.28 9:00, и в этом
29.08.03 9:00 значение всегда true
Почему так происходит? как это исправить?
Мне нужно, чтобы когда дата в time_end была больше даты в time_end1, происходил бы клик по кнопке

Код:
DateTime date_start = Convert.ToDateTime(project.Variables["time_end"].Value);
DateTime date_end = Convert.ToDateTime(project.Variables["time_end1"].Value);
if(date_start > date_end){
    return "true";
}else{
    throw new Exception("false");
}
 

obyavkaby

Client
Регистрация
26.05.2017
Сообщения
187
Благодарностей
17
Баллы
18
А если попробовать выпарсить эту часть даты 29.07.28 и уже ее сравнивать
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
Всем привет.
Взял код из ветки, задал даты в формате, который понимает система. Первая дата у меня: 29.08.03 9:00 и вторая 29.07.30 10:44
Почему-то и в этом случае: 29.07.28 9:00, и в этом
29.08.03 9:00 значение всегда true
Почему так происходит? как это исправить?
Мне нужно, чтобы когда дата в time_end была больше даты в time_end1, происходил бы клик по кнопке

Код:
DateTime date_start = Convert.ToDateTime(project.Variables["time_end"].Value);
DateTime date_end = Convert.ToDateTime(project.Variables["time_end1"].Value);
if(date_start > date_end){
    return "true";
}else{
    throw new Exception("false");
}
Попробуй делать конвертацию в UNIX
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
если выпарсить, он приходит в формате: 2019-07-30 10:44, система ее не понимает тогда
А если преобразовать каждую дату, допустим без времени и сравнить?

Код:
return DateTime.Parse(project.Variables["time_end"].Value).ToString("dd.MM.yyyy");
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
А если преобразовать каждую дату, допустим без времени и сравнить?

Код:
return DateTime.Parse(project.Variables["time_end"].Value).ToString("dd.MM.yyyy");
в том то и прикол, что нужно со временем. А идея хорошая
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
в том то и прикол, что нужно со временем. А идея хорошая
1. Гуглим: умно парсим дату site:zennolab.com
2. Находим подобное: https://zennolab.com/discussion/threads/pomogite-s-datoj-nuzhno-odnu-otnjat-ot-drugoj.48269/#post-359891
3. Рожаем на его основе:
C#:
DateTime date_start = DateTime.ParseExact(project.Variables["time_end"].Value,  "dd.MM.yy h:mm", null); // умно парсим дату из нашей переменной формата произвольного (29.08.03 9:00 , надеюсь "03" это "год 2003"), а то изначально программа ее понимает как набор символов (string) а не как дату.
DateTime date_end = DateTime.ParseExact(project.Variables["time_end1"].Value,  "dd.MM.yy h:mm", null);
// в лог выводим разницу в днях для понимания:
project.SendInfoToLog(Math.Floor((date_start - date_end).TotalDays).ToString(), false);

if(date_start > date_end){
    return "true";
}else{
    throw new Exception("false");
}
Ну и еще о форматах дат\C# почитать бы:
https://metanit.com/sharp/tutorial/19.2.php
http://zennolab.com/discussion/thre...ystro-udobno-podborka-snippetov-vnutri.27710/
https://msdn.microsoft.com/ru-ru/library/8kb3ddd4(v=vs.110).aspx
https://msdn.microsoft.com/ru-ru/library/system.datetime(v=vs.110).aspx
 
Последнее редактирование:
  • Спасибо
Реакции: Sergodjan и Hannes

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
1. Гуглим: умно парсим дату site:zennolab.com
2. Находим подобное: https://zennolab.com/discussion/threads/pomogite-s-datoj-nuzhno-odnu-otnjat-ot-drugoj.48269/#post-359891
3. Рожаем на его основе:
C#:
DateTime date_start = DateTime.ParseExact(project.Variables["time_end"].Value,  "dd.MM.yy h:mm", null); // умно парсим дату из нашей переменной формата произвольного (29.08.03 9:00 , надеюсь "03" это "год 2003"), а то изначально программа ее понимает как набор символов (string) а не как дату.
DateTime date_end = DateTime.ParseExact(project.Variables["time_end1"].Value,  "dd.MM.yy h:mm", null);
// в лог выводим разницу в днях для понимания:
project.SendInfoToLog(Math.Floor((date_start - date_end).TotalDays).ToString(), false);

if(date_start > date_end){
    return "true";
}else{
    throw new Exception("false");
}
Ну и еще о форматах дат\C# почитать бы:
https://metanit.com/sharp/tutorial/19.2.php
http://zennolab.com/discussion/thre...ystro-udobno-podborka-snippetov-vnutri.27710/
https://msdn.microsoft.com/ru-ru/library/8kb3ddd4(v=vs.110).aspx
https://msdn.microsoft.com/ru-ru/library/system.datetime(v=vs.110).aspx
Вот это я тупанул)) какой 03 блин, - 19 нужно. Спасибо за море полезной инфы))
 
  • Спасибо
Реакции: Hannes

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Кстати, можно как-то без кучи регексов данную строку 2019-08-02 09:16 привести к формату: 02.08.19 09:16 ? Т.е. нужно год и дату поменять местами
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Кстати, можно как-то без кучи регексов данную строку 2019-08-02 09:16 привести к формату: 02.08.19 09:16 ? Т.е. нужно год и дату поменять местами
Код:
\d{2}(\d{2})-(\d+)-(\d+) (\d+):(\d+)
заменить на $3.$2.$1 $4:$5
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63

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