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

  • Автор темы Автор темы semafor
  • Дата начала Дата начала
Подскажите..
Есть время в переменной в формате 2021-01-15 01:25:40
Как к нему прибавить 11 часов и записать обратно в переменную?
 
Подскажите..
Есть время в переменной в формате 2021-01-15 01:25:40
Как к нему прибавить 11 часов и записать обратно в переменную?
C#:
Развернуть Свернуть Копировать
return (Convert.ToDateTime(project.Variables["date"].Value).AddHours(11)).ToString("yyyy-MM-dd HH:mm:ss");
Результат выполнения сохранить в нужную переменную
 
Помогите пожалуйста с кодом. Мне нужно от текущей даты отнять число (например 7), записать в другую переменную. Часы, минуты, сек не нужны для моей задачи, только дата
 
Помогите пожалуйста с кодом. Мне нужно от текущей даты отнять число (например 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
Если правильно понял:
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;
Респект и уважение.
 
Подскажите плиз, есть переменная в котором дата
например
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
 
Последнее редактирование:
Подскажите плиз, есть переменная в котором дата
например
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
dt.ToString("dd/MM/yyyy");
Спасибо, помогло. Но появилась другая проблема

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

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

Подскажите, кто знает, как исправить?
 
Согласно стандарту en-US дата выглядит так MM/dd/yyyy Т.е. сначала указывается месяц, затем день и год. И когда компилятор видит в месте, где должен быть указан месяц число 21, он возмущается )))
 
@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:
 
@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
Почет и уважение вам за статью.
 
Спасибо за прекрасный сниппет:
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#:
Развернуть Свернуть Копировать
//РАБОТАЕТ ТОЛЬКО В .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 =
 
Последнее редактирование:
  • Спасибо
Реакции: Ryudo и rosnordic
Такой вариант не устроит?
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:
Спасибо огромное, я бы еще пол дня провозился с конвертацией)
 
Друзья, помогите тому, кто только в начале пути... Сориентируйте, что куда смотреть или подскажите решение: у меня на нужной странице появляются некие даты (формат такой: 04/02/2022) - их три штуки появляется. У меня есть заранее условие: диапазон дат (к примеру с 01.02.2022 по 15.02.2022). Мне нужно сравнить появившиеся даты на странице с нужным диапазоном - если хоть одна дата попадает в этот диапазон, то записать ее в переменную и продолжить выполнение.
Сейчас делаю так: создаю кубик с проверкой текста на странице (в приложенном файле скрин). Когда маленький диапазон дат, то еще терпимо. Подскажите, как можно решить эту задачу? Благодарю
 

Вложения

  • 2022-02-04_14-51-43.png
    2022-02-04_14-51-43.png
    331,3 KB · Просмотры: 299
Друзья, помогите тому, кто только в начале пути... Сориентируйте, что куда смотреть или подскажите решение: у меня на нужной странице появляются некие даты (формат такой: 04/02/2022) - их три штуки появляется. У меня есть заранее условие: диапазон дат (к примеру с 01.02.2022 по 15.02.2022). Мне нужно сравнить появившиеся даты на странице с нужным диапазоном - если хоть одна дата попадает в этот диапазон, то записать ее в переменную и продолжить выполнение.
Сейчас делаю так: создаю кубик с проверкой текста на странице (в приложенном файле скрин). Когда маленький диапазон дат, то еще терпимо. Подскажите, как можно решить эту задачу? Благодарю
Лучше перевести все в UNIX TIME и сравнивать. Не нужно будет столько всего городить.
 
Друзья, помогите тому, кто только в начале пути... Сориентируйте, что куда смотреть или подскажите решение: у меня на нужной странице появляются некие даты (формат такой: 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
Делал в первый раз в жизни, поседел...o_O Вроде работает. Возник вопрос:
C#:
Развернуть Свернуть Копировать
 //делаем что-то, например выводим флаг в переменную проекта
    project.Variables["somevar"].Value = "true";

Результатом выполнения этого кода будет "true" в переменную. Как вывести нужную дату в переменную? (спарсенную ранее дату, которая подошла под диапазон)
 
Сейчас мой код выглядит вот так:
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", а хотелось бы чтоб сама дата. Прошу разьяснить, что не так делаю и пнуть, только не сильно...
 
Дата со страницы парсится в переменную {-Variable.pars_Data_min-}, диапазон нужных дат задаю в переменных {-Variable.min_Date-} и {-Variable.max_Date-}, нужную дату, которая подошла по диапазону, хочу добавить в переменную {-Variable.Date-}
 
Вместо "pars_Data_min" подставить project.Variables["pars_Data_min"].Value ?
Заранее благодарю за помощь
 
C#:
Развернуть Свернуть Копировать
project.Variables["Date"].Value = project.Variables["pars_Data_min"].Value;
Если дата попадает в диапазон, присваиваем переменной проекта Date значение переменной проекта pars_Data_min. Пишу с мобилы, так что могут быть опечатки, но думаю, смысл должен быть понятен.
 
  • Спасибо
Реакции: ceby
Все таки я так и не понял, как мне решить практическую задачу вашим сниппетом. Надо сравнить сохранённую дату с текущим временем, если разница больше 24х часов, то идет выполнение дальше, если меньше, то берется следующая дата. Например сравнимая дата записана в переменную x. заранее спасибо за ответ
 
Надо сравнить сохранённую дату с текущим временем, если разница больше 24х часов, то идет выполнение дальше, если меньше, то берется следующая дата. Например сравнимая дата записана в переменную x. заранее спасибо за ответ
Почитайте блок про сравнение дат в начале темы и про то как использовать дату из переменной (приводить к нужному типу данных)
89386
 
Спс за ответ, это я уже читал, только не понял как в этот код вставить нужные мне переменные, чтобы работало правильно.
 
Вот так я решил свою задачу:

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
А как получить завтрашний день?

return DateTime.Now.ToString("dd.MM.yyyy"); - это сегодняшний а надо сделать +1 день
 
А как получить завтрашний день?

return DateTime.Now.ToString("dd.MM.yyyy"); - это сегодняшний а надо сделать +1 день
C#:
Развернуть Свернуть Копировать
return DateTime.Now.AddDays(1).ToString("dd.MM.yyyy");
 
  • Спасибо
Реакции: art22

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