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

Agent

Client
Регистрация
25.12.2018
Сообщения
155
Благодарностей
48
Баллы
28
C#:
DateTime dtAdd = dt.Add(10,0,0,0,0,0); //здесь указан интервал 10 лет
Поясните пожалуйста, как применить данный метод, имея следующие переменные:
timenow = 11:12:42
timeplus = 02:01:40
timenew = здесь нужно к timenow прибавить timeplus
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
399
Баллы
63
Поясните пожалуйста, как применить данный метод, имея следующие переменные:
timenow = 11:12:42
timeplus = 02:01:40
timenew = здесь нужно к timenow прибавить timeplus
Здесь мы имеем дело не с датой, а с временным отрезком (11 часов, 12 минут и 42 сек) — это структура TimeSpan. создаем переменные TimeSpan, их сумма тоже Timespan. А после сложения можем перевести полученное значение в DateTime, указав год, месяц и день.
C#:
TimeSpan ts1 = new TimeSpan(11, 12, 42);
TimeSpan ts2 = new TimeSpan(2, 1, 40);

TimeSpan res = ts1 + ts2;

//Если надо в дату перегнать
DateTime dt = new DateTime(2021, 01, 30, res.Hours, res.Minutes, res.Seconds);

//или  так (раскоментировать)
//DateTime dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, res.Hours, res.Minutes, res.Seconds);

return dt;
Вот, еще вариант, с DateTime.Now:
C#:
DateTime dtnow = DateTime.Now;
TimeSpan ts = TimeSpan.Parse("02:01:40");
DateTime dtnew = dtnow
                .AddHours(Convert.ToDouble(ts.Hours))
                .AddMinutes(Convert.ToDouble(ts.Minutes))
                .AddSeconds(Convert.ToDouble(ts.Seconds));
                
return dtnew;
 
Последнее редактирование:
  • Спасибо
Реакции: Agent

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
399
Баллы
63
Есть ли какой-нибудь C # для изменения и установки формата даты? :-)
Формат вывода даты однозначно зависит от региональных настроек конкретного ПК. Чтобы оперировать этими настройками, существует класс System.Globalization.CultureInfo и его методы, позволяющие менять текущую культуру или явно задавать требуемый ее формат.

Для парсинга из строки дат с форматом, отличным от установленного на ПК, в DateTime имеется метод ParseExact (о нем есть инфо в статье).

Вывести даты в текущем региональном формате можно по разному, для этого в .NET есть стандартные форматы, а чтобы вывести в строку в своем виде есть конструкция .ToString("dd-MM-yyy"), где "dd-MM-yyy" — вид в котором надо отправить дату в строку (и об этом тоже есть в статье). Кстати, не припомню, чтобы где-то в вебе (хоть через браузер, хоть через гет-пост, хоть через API) мне пришлось работать именно с DateTime, а не его строковым отображением. Т.е., по сути, любое оперирование с датой и временем сводится к следующим этапам:
1. Спарсить дату (в соотв. с входными региональными настройками)
2. Обработать ее согласно стоящей задаче (в текущих региональных настройках ПК)
3. Получить строку даты в требуемом формате и делать с ней все что душе угодно — передавать в пост-гет, в апи или в браузер.
Есть еще эксель, который должен понимать, что вот это дата, но я предпочитаю и в экселе хранить даты в строковом формате, т.к. при экспериментах получил неоднозначные варианты распознавания, а потому благополучно забил на это.
 
Последнее редактирование:
  • Спасибо
Реакции: jackeyroe1

baracuda

Client
Регистрация
19.06.2013
Сообщения
733
Благодарностей
247
Баллы
43
Нужен unix time начало дня, к примеру: сегодня 00:00:00 GMT
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 433
Благодарностей
1 280
Баллы
113
  • Спасибо
Реакции: baracuda

minfin

Client
Регистрация
13.01.2020
Сообщения
144
Благодарностей
99
Баллы
28
DEL
 
Последнее редактирование:

awm

Client
Регистрация
02.11.2011
Сообщения
159
Благодарностей
43
Баллы
28
В исходном коде приложения на java собирается строка с методом System.nanoTime() . Нашел вроде подходящий сниппет С#, но не знаю как приспособить под зенку? Это класс system.diagnostics.stopwatch
C#:
System.nanoTime();
private static long nanoTime() {
   long nano = 10000L * Stopwatch.GetTimestamp();
   nano /= TimeSpan.TicksPerMillisecond;
   nano *= 100L;
   return nano;
}
Может есть другие варианты?
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 190
Баллы
113
После того, как осваиваешь использование DateTimeOffsett возвращаться к DateTime больше не захочется
 

Zetaraha

Новичок
Регистрация
13.09.2021
Сообщения
2
Благодарностей
0
Баллы
1

radv

Client
Регистрация
11.05.2015
Сообщения
3 673
Благодарностей
1 855
Баллы
113
Звучит всё настолько просто, но сколько это займёт по времени?
Все намного проще, чем кажется. Особенно если делать, пробовать, изучать, а не рассуждать ) . Все познается в сравнении.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 190
Баллы
113
Звучит всё настолько просто, но сколько это займёт по времени?
Почти нисколько. DateTimeOffset легче без всяких там конвертаций форматов времени. Он парсит как есть и дает просто отклонение от определенной точки времени, не зависящей от таймзоны. В то время как в DateTime за точку отсчета можно брать время UTC, локальное время.
По этой причине программистами убито сотни или тысячи лет по исправлению багов. Я сам пару часов точно потратил, но с DateTimeOffset зато ни одного бага с конвертацией не правил, так как их не было.
Сами Microsoft рекомендуют отказаться от использования DateTime в новых проектах
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 190
Баллы
113
Вот статья на английском, которая показывает, что у DateTime немало проблем и лучше использовать DateTimeOffset, а DateTime оставить только для поддержки старых библиотек
 

seowin

Client
Регистрация
02.05.2016
Сообщения
106
Благодарностей
9
Баллы
18
Помогите сравнить два времени.
Пробую код ниже, но он именно считает разницу.
Задача именно не вывести разницу, а сравнить.
C#:
DateTime date1 = Convert.ToDateTime(project.Variables["Time1"].Value);
DateTime date2 = Convert.ToDateTime(project.Variables["Time2"].Value);
TimeSpan diff = date2 - date1;
return diff.ToString("hh\\:mm");
Текущее в формате HH:mm с 21:00
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 433
Благодарностей
1 280
Баллы
113
Помогите сравнить два времени.
Пробую код ниже, но он именно считает разницу.
Задача именно не вывести разницу, а сравнить.
C#:
DateTime date1 = Convert.ToDateTime(project.Variables["Time1"].Value);
DateTime date2 = Convert.ToDateTime(project.Variables["Time2"].Value);
TimeSpan diff = date2 - date1;
return diff.ToString("hh\\:mm");
Текущее в формате HH:mm с 21:00
Что значит сравнить? А вывести разницу - это не сравнить?
 

seowin

Client
Регистрация
02.05.2016
Сообщения
106
Благодарностей
9
Баллы
18
Что значит сравнить? А вывести разницу - это не сравнить?
Имею ввиду, если Time1 < Time2, то вывести False
Если наоборот, то True.
Пробую вот такой код:

C#:
DateTime date_start = Convert.ToDateTime(project.Variables["Time1"].Value);
DateTime date_end = Convert.ToDateTime(project.Variables["Time2"].Value);
if(date_start > date_end){
    return "true";
}else{
 throw new Exception("false");
Работает верно при условии Time1 < Time2, при обратном выдает:
Выполнение действия CSharp OwnCode. [Строка: 10; Cтолбец: 0]
Но хотя уже по идеи таким можно пользоваться.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 433
Благодарностей
1 280
Баллы
113
Имею ввиду, если Time1 < Time2, то вывести False
Если наоборот, то True.
Пробую вот такой код:

C#:
DateTime date_start = Convert.ToDateTime(project.Variables["Time1"].Value);
DateTime date_end = Convert.ToDateTime(project.Variables["Time2"].Value);
if(date_start > date_end){
    return "true";
}else{
throw new Exception("false");
Работает верно при условии Time1 < Time2, при обратном выдает:
Выполнение действия CSharp OwnCode. [Строка: 10; Cтолбец: 0]
Но хотя уже по идеи таким можно пользоваться.
Данный код отвечает за выход по красной и вывода ошибки + слова false - то что в принципе происходит у вас.
C#:
 throw new Exception("false");
C#:
DateTime date = Convert.ToDateTime("2021-01-14 09:21:40");
DateTime date1 = Convert.ToDateTime("2021-01-15 09:21:40");

if (date > date1)
{
    return "good";
}
else
{
    return "false";

}
 
Последнее редактирование:
  • Спасибо
Реакции: seowin

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
399
Баллы
63
C#:
DateTime date = Convert.ToDateTime("2021-01-14 09:21:40");
DateTime date1 = Convert.ToDateTime("2021-01-15 09:21:40");

TimeSpan diff = date - date1;
//если date1 > date — вышли по красной
if(diff.TotalSeconds < 0) throw new Exception("date1 > date");

//или, если надо наоборот
if(diff.TotalSeconds > 0) throw new Exception("date1 > date");
 
  • Спасибо
Реакции: Alex.A и seowin

Alex.A

Client
Регистрация
14.11.2020
Сообщения
378
Благодарностей
169
Баллы
43
Добрый день!
Подскажите, мне нужно, чтобы разница между временем date1 и date была больше или равна 7.25 минут. Какой будет код?
Спасибо.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 433
Благодарностей
1 280
Баллы
113
Добрый день!
Подскажите, мне нужно, чтобы разница между временем date1 и date была больше или равна 7.25 минут. Какой будет код?
Спасибо.
Что это за минуты такие - 7.25? Что за формат?
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 433
Благодарностей
1 280
Баллы
113
Добрый день!
Подскажите, мне нужно, чтобы разница между временем date1 и date была больше или равна 7.25 минут. Какой будет код?
Спасибо.
В Минутах:
DateTime date = Convert.ToDateTime("2021-01-15 09:20:40");
DateTime date1 = Convert.ToDateTime("2021-01-15 09:21:40");
TimeSpan diff = date1 - date;

if (diff.TotalMinutes >= 25)
{
  
    return "Больше или равна 25: "+ diff.TotalMinutes +"";
}
else
{
  
  
    return "Меньше 25 минут: "+ diff.TotalMinutes +"";
}

В Часах и Минутах:
DateTime date = Convert.ToDateTime("2021-01-15 01:25:40");
DateTime date1 = Convert.ToDateTime("2021-01-15 09:21:40");
TimeSpan diff = date1 - date;

if (diff.TotalHours >= 7.25)
{
   
    return "Больше или равно 7 часов: "+ diff.TotalHours +"";
}
else
{
   
   
    return "Меньше 7 часов: "+ diff.TotalHours +"";
}
 
  • Спасибо
Реакции: Alex.A

braind

Client
Регистрация
10.10.2012
Сообщения
119
Благодарностей
11
Баллы
18
Не нашел в статье конвертацию даты в порядковый вид, как это делает Excel/Google таблицы при помощие формулы ДАТАЗНАЧ (DateValue).
Кто нибудь подскажет как это сделать?
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
399
Баллы
63
Не нашел в статье конвертацию даты в порядковый вид, как это делает Excel/Google таблицы при помощие формулы ДАТАЗНАЧ (DateValue).
Кто нибудь подскажет как это сделать?
Ни разу не возникало необходимости для таких штук. Признаться, с разбегу даже не понял для чего это нужно. Если нужно получить дату в формате числа — есть unixtime, с которым работает весь интернет и для которого есть встроенные методы в DateTimeOffset. А эту штуку вижу впервые )))
 
Последнее редактирование:

Reysh

Client
Регистрация
02.12.2018
Сообщения
198
Благодарностей
132
Баллы
43
Не нашел в статье конвертацию даты в порядковый вид, как это делает Excel/Google таблицы при помощие формулы ДАТАЗНАЧ (DateValue).
Кто нибудь подскажет как это сделать?
В переменную date - нужно указать свою дату
C#:
return (Convert.ToDateTime(project.Variables["date"].Value) - new DateTime(1900,1,1)).TotalDays;
 
  • Спасибо
Реакции: braind

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
399
Баллы
63
В переменную date - нужно указать свою дату
C#:
return (Convert.ToDateTime(project.Variables["date"].Value) - new DateTime(1900,1,1)).TotalDays;
Ага, почитал про эту примочку екселевскую, только не понял для чего оно надо если есть unixtime. Но если человеку надо, так надо ))
Для текущей даты:
C#:
return (DateTime.Now.Date - new DateTime(1900,1,1)).TotalDays;
 
  • Спасибо
Реакции: Reysh и braind

braind

Client
Регистрация
10.10.2012
Сообщения
119
Благодарностей
11
Баллы
18
В переменную date - нужно указать свою дату
C#:
return (Convert.ToDateTime(project.Variables["date"].Value) - new DateTime(1900,1,1)).TotalDays;
Спасибо!

Ни разу не возникало необходимости для таких штук. Признаться, с разбегу даже не понял для чего это нужно. Если нужно получить дату в формате числа — есть unixtime, с которым работает весь интернет и для которого есть встроенные методы в DateTimeOffset. А эту штуку вижу впервые )))
работать с датой в виде порядковых чисел очень удобно в некоторых случаях. Не нужно никуда ничего переводить, просто складываешь/вычитаешь колво дней и все. Сравнивать очень удобно, вытаскивать данные в периоде за последние х дней и т.д.
По сути да, это такой же числовой формат, как Unix, только я уже с ним работаю в таблицах, так что переводить все на Unix нет желания
 
Последнее редактирование:
  • Спасибо
Реакции: Reysh

seowin

Client
Регистрация
02.05.2016
Сообщения
106
Благодарностей
9
Баллы
18
Получаю дату в виде: 2021-09-24, а мне нужно ее сделать вот в такой вид: 24.09.2021
Подскажите, пожалуйста, как сконвертировать дату?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 673
Благодарностей
1 855
Баллы
113
Получаю дату в виде: 2021-09-24, а мне нужно ее сделать вот в такой вид: 24.09.2021
Подскажите, пожалуйста, как сконвертировать дату?
так в статье есть почти готовое решение
83251
 

seowin

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

Reysh

Client
Регистрация
02.12.2018
Сообщения
198
Благодарностей
132
Баллы
43
Тут все понятно, но дату я не через зенку получаю, а паршу ее специально с одного сервиса и это я просто написал сегодняшную дату, она может быть другой.
В переменную "input_date" записать вашу дату - 2021-09-24
C#:
return Convert.ToDateTime(project.Variables["input_date"].Value).ToString("dd.MM.yyyy");
А результат выполнения кода сохранить в нужную переменную
 
  • Спасибо
Реакции: Greez и seowin

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