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

Agent

Client
Регистрация
25.12.2018
Сообщения
168
Благодарностей
50
Баллы
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
Благодарностей
405
Баллы
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
Благодарностей
405
Баллы
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
Сообщения
856
Благодарностей
295
Баллы
63
Нужен unix time начало дня, к примеру: сегодня 00:00:00 GMT
 

The_vAe

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

minfin

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

awm

Client
Регистрация
02.11.2011
Сообщения
160
Благодарностей
44
Баллы
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 311
Благодарностей
1 191
Баллы
113
После того, как осваиваешь использование DateTimeOffsett возвращаться к DateTime больше не захочется
 

Zetaraha

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

radv

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

amyboose

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

amyboose

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

seowin

Client
Регистрация
02.05.2016
Сообщения
121
Благодарностей
11
Баллы
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
 

The_vAe

Client
Регистрация
30.05.2019
Сообщения
3 629
Благодарностей
1 413
Баллы
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
Сообщения
121
Благодарностей
11
Баллы
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]
Но хотя уже по идеи таким можно пользоваться.
 

The_vAe

Client
Регистрация
30.05.2019
Сообщения
3 629
Благодарностей
1 413
Баллы
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
Благодарностей
405
Баллы
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
Сообщения
484
Благодарностей
246
Баллы
43
Добрый день!
Подскажите, мне нужно, чтобы разница между временем date1 и date была больше или равна 7.25 минут. Какой будет код?
Спасибо.
 

The_vAe

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

The_vAe

Client
Регистрация
30.05.2019
Сообщения
3 629
Благодарностей
1 413
Баллы
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
Благодарностей
12
Баллы
18
Не нашел в статье конвертацию даты в порядковый вид, как это делает Excel/Google таблицы при помощие формулы ДАТАЗНАЧ (DateValue).
Кто нибудь подскажет как это сделать?
 

semafor

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

Reysh

Client
Регистрация
02.12.2018
Сообщения
197
Благодарностей
134
Баллы
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
Благодарностей
405
Баллы
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
Благодарностей
12
Баллы
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
Сообщения
121
Благодарностей
11
Баллы
18
Получаю дату в виде: 2021-09-24, а мне нужно ее сделать вот в такой вид: 24.09.2021
Подскажите, пожалуйста, как сконвертировать дату?
 

radv

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

seowin

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

Reysh

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

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