Дата: месяц (текстовый формат) перевести в числовой и сравнить с текущей датой

Antares

Client
Регистрация
19.01.2018
Сообщения
131
Благодарностей
9
Баллы
18
Всем привет.

До последнего не хотел лезть с очередным вопросом по датам на форум. Но поискав и перечитав несколько тем, так ответа и не нашел.

Есть 2 даты:
1) Из парсинга - формат "7 мар. 2018 г."
2) Текущая - Беру командой {-TimeNow.Date-}, формат соответственно "03/07/2018 21:27:36"

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

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
Не надо стесняться, тут люди не знают как удалить строки из таблицы и не стесняются спрашивать.

Интересная задача. как вычитать даты если в месяце может быть и 30 и 31 день. Есть такой сервис номер дня в году http://calendarin.net/ru/day-number-in-year
На сайте выпадающий список, месяц в числовом виде и в цифровом. осталось только сделать клики по выпадающему меню. Сохранить числа и экшеном свой код > js выполнить вычитание.
 
  • Спасибо
Реакции: maxim.gutareff

Antares

Client
Регистрация
19.01.2018
Сообщения
131
Благодарностей
9
Баллы
18
Не надо стесняться, тут люди не знают как удалить строки из таблицы и не стесняются спрашивать.

Интересная задача. как вычитать даты если в месяце может быть и 30 и 31 день. Есть такой сервис номер дня в году http://calendarin.net/ru/day-number-in-year
На сайте выпадающий список, месяц в числовом виде и в цифровом. осталось только сделать клики по выпадающему меню. Сохранить числа и экшеном свой код > js выполнить вычитание.
Спасибо за ответ.
Я, честно признаться, представлял, что есть какие то более простые (может даже заложенные в постер) варианты ну или через код.

Попробую сделать.

Вопрос: а "мар." в число "03" нет штатных способов перевести?
Единственное, что сейчас приходит на ум, это через кубик "свич" создать 12 вариантов ))

Ну и еще конечено, проблема, что завтра, например, этот сайт вдруг закроется)
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
А зачем переводить? просто убери точку, а когда будешь делать клик по месяцу, то в самом экшене уже подставляй значение мар.
А что бы его получить нужна регулярка.
Код:
(?<=\d\ ).*?(?=\.\ )
Да с чего этому сайту закрываться то)) ну может есть и другие решения. Можешь подождать и возможно предложат что-то другое.
 

Antares

Client
Регистрация
19.01.2018
Сообщения
131
Благодарностей
9
Баллы
18
А зачем переводить? просто убери точку, а когда будешь делать клик по месяцу, то в самом экшене уже подставляй значение мар.
А что бы его получить нужна регулярка.
Код:
(?<=\d\ ).*?(?=\.\ )
Да с чего этому сайту закрываться то)) ну может есть и другие решения. Можешь подождать и возможно предложат что-то другое.
Просто нашел такой вот топик: http://zennolab.com/discussion/threads/vychest-iz-odnoj-daty-druguju-kak-poluchit-raznost-v-dnjax.12674/
Тут вроде как обсуждается, то что мне нужно. Но загвоздка в том, что я не знаю как формат даты полученной при парсинге сделать числовым.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
Просто нашел такой вот топик: http://zennolab.com/discussion/threads/vychest-iz-odnoj-daty-druguju-kak-poluchit-raznost-v-dnjax.12674/
Тут вроде как обсуждается, то что мне нужно. Но загвоздка в том, что я не знаю как формат даты полученной при парсинге сделать числовым.
Число
Код:
(?<=").*?(?=\D)
Месяц
Код:
(?<=\d\ ).*?(?=\.\ )
Год
Код:
(?<=\.\ ).*?(?=\ г)
Месяц через свич прогони. И потом скопируй все перменные в одну переменную.
 
  • Спасибо
Реакции: Antares

Antares

Client
Регистрация
19.01.2018
Сообщения
131
Благодарностей
9
Баллы
18
Со свичом так и предполагал делать.. но думал, может есть что то менее громоздкое ))

Пока буду пилить другую часть шаблона, может народ еще подойдет, чего умного подскажет.

Вам спасибо за советы (и регулярки:-)).
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
для начала переводите спарсенную дату в DateTime

Код:
string str_date = "7 мар. 2018 г.";
DateTime dt = DateTime.ParseExact(str_date,"d MMM. yyyy г.",CultureInfo.CurrentCulture);
потом получаете текущую
Код:
DateTime now = new DateTime(DateTime.Now.Year,  DateTime.Now.Month, DateTime.Now.Day,  DateTime.Now.Hour,  DateTime.Now.Minute, 0, 0);
потом вычитаете
Код:
TimeSpan diff = now - dt;
разница в днях в diff.TotalDays (вроде как)

p.s что бы все это дело работало нужно добавить
using System.Globalization;
в "Добаить директивы Using и общий код"
 

Antares

Client
Регистрация
19.01.2018
Сообщения
131
Благодарностей
9
Баллы
18
для начала переводите спарсенную дату в DateTime

Код:
string str_date = "7 мар. 2018 г.";
DateTime dt = DateTime.ParseExact(str_date,"d MMM. yyyy г.",CultureInfo.CurrentCulture);
потом получаете текущую
Код:
DateTime now = new DateTime(DateTime.Now.Year,  DateTime.Now.Month, DateTime.Now.Day,  DateTime.Now.Hour,  DateTime.Now.Minute, 0, 0);
потом вычитаете
Код:
TimeSpan diff = now - dt;
разница в днях в diff.TotalDays (вроде как)

p.s что бы все это дело работало нужно добавить
using System.Globalization;
в "Добаить директивы Using и общий код"

Извиняюсь за свою необразованность, это ведь в С# коде?
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
да, это все писать в кубике "Свой C# код"
а вот это using System.Globalization; добавить в блок "Добаить директивы Using и общий код" на вкладке "Директивы Using"
 

Antares

Client
Регистрация
19.01.2018
Сообщения
131
Благодарностей
9
Баллы
18
да, это все писать в кубике "Свой C# код"
а вот это using System.Globalization; добавить в блок "Добаить директивы Using и общий код" на вкладке "Директивы Using"
Благодарю, буду пробовать
 

Antares

Client
Регистрация
19.01.2018
Сообщения
131
Благодарностей
9
Баллы
18
да, это все писать в кубике "Свой C# код"
а вот это using System.Globalization; добавить в блок "Добаить директивы Using и общий код" на вкладке "Директивы Using"
Вопрос по первой части:
Пишу:
string str_date = project.Variables["a"].Value;
DateTime dt = DateTime.ParseExact(str_date,"d MMM. yyyy г.",CultureInfo.CurrentCulture);

Хочу результат записать обратно в переменную "а", он мне записывает результат "ок". Не подскажите, как правильно выполнить?
 

Antares

Client
Регистрация
19.01.2018
Сообщения
131
Благодарностей
9
Баллы
18
Я предполагаю получить переформатированную дату в переменную "а", вместо "ок".
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Я предполагаю получить переформатированную дату в переменную "а", вместо "ок".
C#:
string date = project.Variables["date"].Value;
DateTime dt = DateTime.ParseExact(date, "d MMM. yyyy г.", new System.Globalization.CultureInfo("ru-RU"));
DateTime now = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
return (now - dt).TotalDays;
Снять чекбокс с "Не возвращать значение" и выбрать нужную переменную.
 
  • Спасибо
Реакции: redman

Antares

Client
Регистрация
19.01.2018
Сообщения
131
Благодарностей
9
Баллы
18
C#:
string date = project.Variables["date"].Value;
DateTime dt = DateTime.ParseExact(date, "d MMM. yyyy г.", new System.Globalization.CultureInfo("ru-RU"));
DateTime now = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
return (now - dt).TotalDays;
Снять чекбокс с "Не возвращать значение" и выбрать нужную переменную.

Спасибо большое за код! Заработало.

На предыдущий вопрос ответ был, видимо, команда return.

Вопрос: с Вашим кодом необходимо "using System.Globalization; добавить в блок "Добаить директивы Using и общий код" на вкладке "Директивы Using""?

да, это все писать в кубике "Свой C# код"
а вот это using System.Globalization; добавить в блок "Добаить директивы Using и общий код" на вкладке "Директивы Using"
В вашем коде была проблема с переменной "new", как я понял... return-ом ошибка выдавалась. Либо я криво что-то сделал. Тем не менее благодарю за содействие.
Переменная now, а не new.. моя опечатка
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Вопрос: с Вашим кодом необходимо "using System.Globalization; добавить в блок "Добаить директивы Using и общий код" на вкладке "Директивы Using""?
Нет, не нужно/не обязательно!
 
  • Спасибо
Реакции: Antares

Antares

Client
Регистрация
19.01.2018
Сообщения
131
Благодарностей
9
Баллы
18

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
для начала переводите спарсенную дату в DateTime

Код:
string str_date = "7 мар. 2018 г.";
DateTime dt = DateTime.ParseExact(str_date,"d MMM. yyyy г.",CultureInfo.CurrentCulture);
потом получаете текущую
Код:
DateTime now = new DateTime(DateTime.Now.Year,  DateTime.Now.Month, DateTime.Now.Day,  DateTime.Now.Hour,  DateTime.Now.Minute, 0, 0);
потом вычитаете
Код:
TimeSpan diff = now - dt;
разница в днях в diff.TotalDays (вроде как)

p.s что бы все это дело работало нужно добавить
using System.Globalization;
в "Добаить директивы Using и общий код"
Классные сниппеты. Я хочу заменить слова сегодня и вчера на даты. Сегодня то понятно, взял дату и все. А вот вчера уже сложнее. Можно ли получить значение вчерашнего дня?
 

etyipin

Client
Регистрация
15.12.2017
Сообщения
95
Благодарностей
34
Баллы
18
а какой шаблон нужен для "22 марта 2018"?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
  • Спасибо
Реакции: Mikhail B.

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
C#:
return DateTime.Now.AddDays(-1).ToString("dd.MM.yyyy");
Благодарю!

а какой шаблон нужен для "22 марта 2018"?
Ты имеешь ввиду, что бы из числового получить буквенное значение месяца?
Я тоже об этом думал, было бы не плохо получить месяц в родительном падеже =)
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Ты имеешь ввиду, что бы из числового получить буквенное значение месяца?
Я тоже об этом думал, было бы не плохо получить месяц в родительном падеже =)
На примере той же вчерашней даты
C#:
return DateTime.Now.AddDays(-1).ToString("dd MMMM yyyy", new System.Globalization.CultureInfo("ru-RU"));
 
  • Спасибо
Реакции: Mikhail B.

Sibirteh

Client
Регистрация
22.01.2019
Сообщения
51
Благодарностей
9
Баллы
8
Подскажите пожалуйста как числовой формат {-Profile.BornMonth-} перевести в буквенный ? Сообщения выше понять не смог (
P.s
Вопрос решен.
Сделал через замену если True то мужик, False женщина :cd:
 
Последнее редактирование:

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 085
Благодарностей
126
Баллы
63
Мне нужно к сервису обращаться не раньше 24 часов, чтобы входить в лимиты.
Я фиксирую прошлую дату в табл и беру текущую для нового обращения.
Как высчитать разность часов?
 

Sibirteh

Client
Регистрация
22.01.2019
Сообщения
51
Благодарностей
9
Баллы
8
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Ребят может кто подсказать что не так?
Через поиск ни чего не нашел.

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

В переменной in_data_s 01.06.2020

C#:
string str_date = project.Variables["in_data_s"].Value;
DateTime dt = DateTime.ParseExact(str_date,"dd.MM.yyyy",CultureInfo.CurrentCulture);
DateTime now = new DateTime(DateTime.Now.Year,  DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour,  DateTime.Now.Minute, 0, 0);
TimeSpan diff = now - dt;
return diff;
В логе:
Компиляция кода Ошибка в действии "CS0103" "Имя "CultureInfo" отсутствует в текущем контексте". [Строка: 1; Cтолбец: 58]

UPD
Нашел кажется из-за отсутствия using System.Globalization; не работал код.

Выдает "11.01:22:00" Как-то формат вывода можно править?
 
Последнее редактирование:
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 689
Баллы
113
вроде дата просто парситься. DateTime.Parse("20.10.2020");
ну там есть еще 2 перегрузки, но это вон статью надо курить.
ну а конце return diff.TotalDays; вернет разницу в днях.
 
  • Спасибо
Реакции: Сибиряк

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