Работа с датой и временем в Zennoposter с использованием методов C#

Tronheym

Client
Регистрация
13.10.2016
Сообщения
146
Благодарностей
30
Баллы
28
Подскажите..
Есть время в переменной в формате 2021-01-15 01:25:40
Как к нему прибавить 11 часов и записать обратно в переменную?
 

Reysh

Client
Регистрация
02.12.2018
Сообщения
198
Благодарностей
133
Баллы
43
Подскажите..
Есть время в переменной в формате 2021-01-15 01:25:40
Как к нему прибавить 11 часов и записать обратно в переменную?
C#:
return (Convert.ToDateTime(project.Variables["date"].Value).AddHours(11)).ToString("yyyy-MM-dd HH:mm:ss");
Результат выполнения сохранить в нужную переменную
 

NinjaInWhite

Client
Регистрация
11.05.2018
Сообщения
12
Благодарностей
4
Баллы
3
Помогите пожалуйста с кодом. Мне нужно от текущей даты отнять число (например 7), записать в другую переменную. Часы, минуты, сек не нужны для моей задачи, только дата
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Помогите пожалуйста с кодом. Мне нужно от текущей даты отнять число (например 7), записать в другую переменную. Часы, минуты, сек не нужны для моей задачи, только дата
Если правильно понял:
C#:
string str = "20.10.2021 10:00";
DateTime dt = DateTime.Parse(str);
dt = dt.AddDays(-7);
return dt;
Или если с текущей датой:
C#:
DateTime dt = DateTime.Now;
dt = dt.AddDays(-7);
return dt;
Или если время не нужно:
C#:
DateTime dt = DateTime.Now.Date;
dt = dt.AddDays(-7);
return dt;
 
  • Спасибо
Реакции: Bahus и NinjaInWhite

NinjaInWhite

Client
Регистрация
11.05.2018
Сообщения
12
Благодарностей
4
Баллы
3
Если правильно понял:
C#:
string str = "20.10.2021 10:00";
DateTime dt = DateTime.Parse(str);
dt = dt.AddDays(-7);
return dt;
Или если с текущей датой:
C#:
DateTime dt = DateTime.Now;
dt = dt.AddDays(-7);
return dt;
Или если время не нужно:
C#:
DateTime dt = DateTime.Now.Date;
dt = dt.AddDays(-7);
return dt;
Респект и уважение.
 

deskuznetsov

Client
Регистрация
29.08.2019
Сообщения
528
Благодарностей
363
Баллы
63
Подскажите плиз, есть переменная в котором дата
например
19/02/2001
8/2/2001
и т.п

Нужно конвертировать так, чтобы "8/2/2001" стал "08/02/2001"
То есть добавить 0

C#:
string input6 = "06/23/2020"; //23.06.2020 по en-US
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");//задаем языковые (региональные) стандарты
DateTime dt = DateTime.ParseExact(input6, "d", culture);//Выполнение кода C#  Результат: 23.06.2020 0:00:00
return dt;
Этот код добавляет еще и время, а как сделать без времени? что бы только дата была?

пробовал вместо "d" указывать разные форматы и все равно на выходе выдает с указанием времени



Пробовал еще такой код
C#:
string date = project.Variables["dob"].Value;
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
DateTime formatDate;
DateTime.TryParse(date, out formatDate);
return formatDate.ToString("dd/MM/yyyy");
В ПМ работает, а при выполнении в постере выдает 01.01. и какой то год коженного века, то есть игнорирует дату из переменной и всегда выдает эти 01.01
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
Подскажите плиз, есть переменная в котором дата
например
19/02/2001
8/2/2001
и т.п

Нужно конвертировать так, чтобы "8/2/2001" стал "08/02/2001"
То есть добавить 0

C#:
string input6 = "06/23/2020"; //23.06.2020 по en-US
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");//задаем языковые (региональные) стандарты
DateTime dt = DateTime.ParseExact(input6, "d", culture);//Выполнение кода C#  Результат: 23.06.2020 0:00:00
return dt;
Этот код добавляет еще и время, а как сделать без времени? что бы только дата была?

пробовал вместо "d" указывать разные форматы и все равно на выходе выдает с указанием времени
dt.ToString("dd/MM/yyyy");
 
  • Спасибо
Реакции: Bahus и deskuznetsov

deskuznetsov

Client
Регистрация
29.08.2019
Сообщения
528
Благодарностей
363
Баллы
63
Спасибо, помогло. Но появилась другая проблема

Выполнение действия CSharp OwnCode. DateTime, представленный строкой, не поддерживается в календаре System.Globalization.GregorianCalendar.

21/04/1929 - на такую дату в переменной ругается
на такую нет 2/04/1929

Подскажите, кто знает, как исправить?
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Согласно стандарту en-US дата выглядит так MM/dd/yyyy Т.е. сначала указывается месяц, затем день и год. И когда компилятор видит в месте, где должен быть указан месяц число 21, он возмущается )))
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
@semafor, @Phoenix78, "Все остальные". Помогите, пожалуйста.)
Работает:
//REPL
string input = $"{DateTime.Today:MM dd yyyy}";

var culture = System.Globalization.CultureInfo.CreateSpecificCulture("ru-RU");
DateTime dt = DateTime.ParseExact(input, "MM dd yyyy", culture);

Print(dt);
Задача:
Из данных у меня только день недели "Вторник".
Как при таких вводных можно получить дату целиком? Учитывая что день недели всегда ближайший.

Я пробовал менять культуру. Писал в маске "dddd". Но ничего не помогает.
Так же я пытался указать: $"Вторник {DateTime.Today:MM yyyy}", но тоже никак.
:cl:
 

Reysh

Client
Регистрация
02.12.2018
Сообщения
198
Благодарностей
133
Баллы
43
@semafor, @Phoenix78, "Все остальные". Помогите, пожалуйста.)
Работает:
//REPL
string input = $"{DateTime.Today:MM dd yyyy}";

var culture = System.Globalization.CultureInfo.CreateSpecificCulture("ru-RU");
DateTime dt = DateTime.ParseExact(input, "MM dd yyyy", culture);

Print(dt);
Задача:
Из данных у меня только день недели "Вторник".
Как при таких вводных можно получить дату целиком? Учитывая что день недели всегда ближайший.

Я пробовал менять культуру. Писал в маске "dddd". Но ничего не помогает.
Так же я пытался указать: $"Вторник {DateTime.Today:MM yyyy}", но тоже никак.
:cl:
C#:
string input = "Понедельник";
DateTime date = Convert.ToDateTime("7.12.2021");
string[] week = new string[] {"Понедельник",
            "Вторник", "Среда", "Четверг", "Пятница",
            "Суббота", "Воскресенье" };

return date.AddDays(Array.IndexOf(week, input) - (int) date.DayOfWeek + 1).ToString("d");
 
  • Спасибо
Реакции: djaga

MaximTurbo

Client
Регистрация
11.10.2019
Сообщения
49
Благодарностей
12
Баллы
8
Почет и уважение вам за статью.
 

rosnordic

Client
Регистрация
18.08.2016
Сообщения
143
Благодарностей
28
Баллы
28
Спасибо за прекрасный сниппет:
C#:
//РАБОТАЕТ ТОЛЬКО В .NET 4.6 и выше. unix time для даты 19.02.2020 20:34:00 UTC
long dt = new DateTimeOffset(2020,2,19,20,34,0,TimeSpan.Zero).ToUnixTimeSeconds();//Выполнение кода C#  Результат: dt = 1582144440; 1 способ - dts = 1582144440
Подскажите, а как грамотно положить из переменной проекта дату и время сюда без распаршивания 6 чисел, если строка будет такого вида: 2020,2,19,20,34,0?
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 521
Благодарностей
1 319
Баллы
113
Спасибо за прекрасный сниппет:
C#:
//РАБОТАЕТ ТОЛЬКО В .NET 4.6 и выше. unix time для даты 19.02.2020 20:34:00 UTC
long dt = new DateTimeOffset(2020,2,19,20,34,0,TimeSpan.Zero).ToUnixTimeSeconds();//Выполнение кода C#  Результат: dt = 1582144440; 1 способ - dts = 1582144440
Подскажите, а как грамотно положить из переменной проекта дату и время сюда без распаршивания 6 чисел, если строка будет такого вида: 2020,2,19,20,34,0?
Такой вариант не устроит?
C#:
//string data1 = project.Variables["Имя Переменной"].Value;
string data1 = "26.01.2022 12:34";
return new DateTimeOffset(DateTime.Parse(data1),TimeSpan.Zero).ToUnixTimeSeconds();//Выполнение кода C#  Результат: dt = 1582144440; 1 способ - dts = 1582144440
Другого формата не получается сделать сразу?

Либо вот так делать
C#:
//string data1 = project.Variables["Имя Переменной"].Value;
string data1 = "2020,2,19,20,34,0";


// Сплит данных
string[] output = data1.Split(new string[] { "," }, StringSplitOptions.None);  // Разделяем Split


// Разбив данных
string Year = output[0];
string Month = output[1];
string Day = output[2];
string Hour = output[3];
string Minute = output[4];
string Second = output[5];


return new DateTimeOffset(DateTime.Parse(Year + "." + Month + "." + Day + " " + Hour + ":" + Minute + ":" + Second),TimeSpan.Zero).ToUnixTimeSeconds();//Выполнение кода C#  Результат: dt = 1582144440; 1 способ - dts =
 
Последнее редактирование:
  • Спасибо
Реакции: rosnordic

rosnordic

Client
Регистрация
18.08.2016
Сообщения
143
Благодарностей
28
Баллы
28
Такой вариант не устроит?
C#:
//string data1 = project.Variables["Имя Переменной"].Value;
string data1 = "26.01.2022 12:34";
return new DateTimeOffset(DateTime.Parse(data1),TimeSpan.Zero).ToUnixTimeSeconds();//Выполнение кода C#  Результат: dt = 1582144440; 1 способ - dts = 1582144440
Работает :bu:
Спасибо огромное, я бы еще пол дня провозился с конвертацией)
 

ceby

Client
Регистрация
13.12.2021
Сообщения
20
Благодарностей
3
Баллы
3
Друзья, помогите тому, кто только в начале пути... Сориентируйте, что куда смотреть или подскажите решение: у меня на нужной странице появляются некие даты (формат такой: 04/02/2022) - их три штуки появляется. У меня есть заранее условие: диапазон дат (к примеру с 01.02.2022 по 15.02.2022). Мне нужно сравнить появившиеся даты на странице с нужным диапазоном - если хоть одна дата попадает в этот диапазон, то записать ее в переменную и продолжить выполнение.
Сейчас делаю так: создаю кубик с проверкой текста на странице (в приложенном файле скрин). Когда маленький диапазон дат, то еще терпимо. Подскажите, как можно решить эту задачу? Благодарю
 

Вложения

Tvister

Client
Регистрация
09.09.2010
Сообщения
255
Благодарностей
33
Баллы
28
Друзья, помогите тому, кто только в начале пути... Сориентируйте, что куда смотреть или подскажите решение: у меня на нужной странице появляются некие даты (формат такой: 04/02/2022) - их три штуки появляется. У меня есть заранее условие: диапазон дат (к примеру с 01.02.2022 по 15.02.2022). Мне нужно сравнить появившиеся даты на странице с нужным диапазоном - если хоть одна дата попадает в этот диапазон, то записать ее в переменную и продолжить выполнение.
Сейчас делаю так: создаю кубик с проверкой текста на странице (в приложенном файле скрин). Когда маленький диапазон дат, то еще терпимо. Подскажите, как можно решить эту задачу? Благодарю
Лучше перевести все в UNIX TIME и сравнивать. Не нужно будет столько всего городить.
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Друзья, помогите тому, кто только в начале пути... Сориентируйте, что куда смотреть или подскажите решение: у меня на нужной странице появляются некие даты (формат такой: 04/02/2022) - их три штуки появляется. У меня есть заранее условие: диапазон дат (к примеру с 01.02.2022 по 15.02.2022). Мне нужно сравнить появившиеся даты на странице с нужным диапазоном - если хоть одна дата попадает в этот диапазон, то записать ее в переменную и продолжить выполнение.
Сейчас делаю так: создаю кубик с проверкой текста на странице (в приложенном файле скрин). Когда маленький диапазон дат, то еще терпимо. Подскажите, как можно решить эту задачу? Благодарю
@Tvister правильно сказал:
C#:
//для переменной
//string min = project.Variables["min"].Value;
string min = "01/02/2022";
//парсим нижнюю дату диапазона, преобразуем ее в DiteTimeOffset и получаем unixtime
DateTimeOffset dtofmin = DateTime.Parse(min);;
long udtmin = dtofmin.ToUnixTimeSeconds();

//верх. дата диапазона
string max = "15/02/2022";
DateTimeOffset dtofmax = DateTime.Parse(max);;
long udtmax = dtofmax.ToUnixTimeSeconds();

//значение со страницы
string parse = "01/02/2022";
DateTimeOffset dtofparse = DateTime.Parse(parse);;
long udtparse = dtofparse.ToUnixTimeSeconds();

//если значение со страницы больше или равно нижней границе
//и значение со страницы меньше или равно верх границе
if(udtmin <= udtparse && udtmax >= udtparse)
{
    //делаем что-то, например выводим флаг в переменную проекта
    project.Variables["somevar"].Value = "true";
    //или выволим в лог
    project.SendInfoToLog("Спаршенная дата находится в диапазоне");
}
//если за пределами, выходим по красной
else throw new Exception("Спаршенная дата находится за пределами диапазона");
 
  • Спасибо
Реакции: ceby

ceby

Client
Регистрация
13.12.2021
Сообщения
20
Благодарностей
3
Баллы
3
Делал в первый раз в жизни, поседел...o_O Вроде работает. Возник вопрос:
C#:
 //делаем что-то, например выводим флаг в переменную проекта
    project.Variables["somevar"].Value = "true";
Результатом выполнения этого кода будет "true" в переменную. Как вывести нужную дату в переменную? (спарсенную ранее дату, которая подошла под диапазон)
 

ceby

Client
Регистрация
13.12.2021
Сообщения
20
Благодарностей
3
Баллы
3
Сейчас мой код выглядит вот так:
C#:
//для переменной
string min = project.Variables["min_Date"].Value;
//парсим нижнюю дату диапазона, преобразуем ее в DiteTimeOffset и получаем unixtime
DateTimeOffset dtofmin = DateTime.Parse(min);;
long udtmin = dtofmin.ToUnixTimeSeconds();

//верх. дата диапазона
string max = project.Variables["max_Date"].Value;
DateTimeOffset dtofmax = DateTime.Parse(max);;
long udtmax = dtofmax.ToUnixTimeSeconds();

//значение со страницы
string parse = project.Variables["pars_Data_min"].Value;
DateTimeOffset dtofparse = DateTime.Parse(parse);;
long udtparse = dtofparse.ToUnixTimeSeconds();

//если значение со страницы больше или равно нижней границе
//и значение со страницы меньше или равно верх границе
if(udtmin <= udtparse && udtmax >= udtparse)
{
    //делаем что-то, например выводим флаг в переменную проекта
    project.Variables["Date"].Value = "pars_Data_min";
    //или выволим в лог
    project.SendInfoToLog("Спаршенная дата находится в диапазоне");
}
//если за пределами, выходим по красной
else throw new Exception("Спаршенная дата находится за пределами диапазона");
В переменную выводится значение "pars_Data_min", а хотелось бы чтоб сама дата. Прошу разьяснить, что не так делаю и пнуть, только не сильно...
 

ceby

Client
Регистрация
13.12.2021
Сообщения
20
Благодарностей
3
Баллы
3
Дата со страницы парсится в переменную {-Variable.pars_Data_min-}, диапазон нужных дат задаю в переменных {-Variable.min_Date-} и {-Variable.max_Date-}, нужную дату, которая подошла по диапазону, хочу добавить в переменную {-Variable.Date-}
 

ceby

Client
Регистрация
13.12.2021
Сообщения
20
Благодарностей
3
Баллы
3
Вместо "pars_Data_min" подставить project.Variables["pars_Data_min"].Value ?
Заранее благодарю за помощь
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
C#:
project.Variables["Date"].Value = project.Variables["pars_Data_min"].Value;
Если дата попадает в диапазон, присваиваем переменной проекта Date значение переменной проекта pars_Data_min. Пишу с мобилы, так что могут быть опечатки, но думаю, смысл должен быть понятен.
 
  • Спасибо
Реакции: ceby

vitvlad

Client
Регистрация
02.02.2022
Сообщения
42
Благодарностей
7
Баллы
8
Все таки я так и не понял, как мне решить практическую задачу вашим сниппетом. Надо сравнить сохранённую дату с текущим временем, если разница больше 24х часов, то идет выполнение дальше, если меньше, то берется следующая дата. Например сравнимая дата записана в переменную x. заранее спасибо за ответ
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Надо сравнить сохранённую дату с текущим временем, если разница больше 24х часов, то идет выполнение дальше, если меньше, то берется следующая дата. Например сравнимая дата записана в переменную x. заранее спасибо за ответ
Почитайте блок про сравнение дат в начале темы и про то как использовать дату из переменной (приводить к нужному типу данных)
89386
 

vitvlad

Client
Регистрация
02.02.2022
Сообщения
42
Благодарностей
7
Баллы
8
Спс за ответ, это я уже читал, только не понял как в этот код вставить нужные мне переменные, чтобы работало правильно.
 

vitvlad

Client
Регистрация
02.02.2022
Сообщения
42
Благодарностей
7
Баллы
8
Вот так я решил свою задачу:

DateTime date = Convert.ToDateTime(project.Variables["vremy_zaverheniy_rabot"].Value);
DateTime date1 = Convert.ToDateTime(project.Variables["tekuhee_vremy"].Value);
TimeSpan diff = date1 - date;
return Math.Floor(diff.TotalSeconds);

результат в переменную tame_out_0

потом след кубик

{-Variable.tame_out_0-}/3600 , результат в переменную tame_out_1

получаю полные часы, след кубик логика сравнение с 24 часами {-Variable.tame_out_1-}>=24
 
  • Спасибо
Реакции: Alex.A

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
А как получить завтрашний день?

return DateTime.Now.ToString("dd.MM.yyyy"); - это сегодняшний а надо сделать +1 день
 

Phoenix78

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

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28

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