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

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 139
Баллы
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 139
Баллы
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 139
Баллы
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
Сообщения
397
Благодарностей
222
Баллы
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
Сообщения
283
Благодарностей
100
Баллы
43
У меня в проектах всё работает относительно {-TimeNow.UnixTime-}.

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

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

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

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

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 519
Благодарностей
10 068
Баллы
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
Сообщения
397
Благодарностей
222
Баллы
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
Сообщения
188
Благодарностей
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 685
Благодарностей
4 652
Баллы
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
Сообщения
188
Благодарностей
17
Баллы
18
Я искал решение задачи и переписал так как у человека написано, он же свой пример выложил, значит у него работает, а у меня ошибки, вот и спрашиваю причину.
 

Вложения

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

ssXXXss

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

obyavkaby

Client
Регистрация
26.05.2017
Сообщения
188
Благодарностей
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 КБ Просмотры: 228

obyavkaby

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

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 519
Благодарностей
10 068
Баллы
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
Сообщения
188
Благодарностей
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
Сообщения
22 519
Благодарностей
10 068
Баллы
113

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 142
Благодарностей
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
Сообщения
188
Благодарностей
17
Баллы
18
А если попробовать выпарсить эту часть даты 29.07.28 и уже ее сравнивать
 

artsmm

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

ezotonal

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

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

artsmm

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

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

orka13

Client
Регистрация
07.05.2015
Сообщения
2 190
Благодарностей
2 208
Баллы
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 142
Благодарностей
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 142
Благодарностей
196
Баллы
63
Кстати, можно как-то без кучи регексов данную строку 2019-08-02 09:16 привести к формату: 02.08.19 09:16 ? Т.е. нужно год и дату поменять местами
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 652
Баллы
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 142
Благодарностей
196
Баллы
63

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