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

  • Автор темы Автор темы semafor
  • Дата начала Дата начала
C#:
Развернуть Свернуть Копировать
DateTime dtAdd = dt.Add(10,0,0,0,0,0); //здесь указан интервал 10 лет
Поясните пожалуйста, как применить данный метод, имея следующие переменные:
timenow = 11:12:42
timeplus = 02:01:40
timenew = здесь нужно к timenow прибавить timeplus
 
Поясните пожалуйста, как применить данный метод, имея следующие переменные:
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
Есть ли какой-нибудь C # для изменения и установки формата даты? :-)
Формат вывода даты однозначно зависит от региональных настроек конкретного ПК. Чтобы оперировать этими настройками, существует класс System.Globalization.CultureInfo и его методы, позволяющие менять текущую культуру или явно задавать требуемый ее формат.

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

Вывести даты в текущем региональном формате можно по разному, для этого в .NET есть стандартные форматы, а чтобы вывести в строку в своем виде есть конструкция .ToString("dd-MM-yyy"), где "dd-MM-yyy" — вид в котором надо отправить дату в строку (и об этом тоже есть в статье). Кстати, не припомню, чтобы где-то в вебе (хоть через браузер, хоть через гет-пост, хоть через API) мне пришлось работать именно с DateTime, а не его строковым отображением. Т.е., по сути, любое оперирование с датой и временем сводится к следующим этапам:
1. Спарсить дату (в соотв. с входными региональными настройками)
2. Обработать ее согласно стоящей задаче (в текущих региональных настройках ПК)
3. Получить строку даты в требуемом формате и делать с ней все что душе угодно — передавать в пост-гет, в апи или в браузер.
Есть еще эксель, который должен понимать, что вот это дата, но я предпочитаю и в экселе хранить даты в строковом формате, т.к. при экспериментах получил неоднозначные варианты распознавания, а потому благополучно забил на это.
 
Последнее редактирование:
  • Спасибо
Реакции: jackeyroe1
Нужен unix time начало дня, к примеру: сегодня 00:00:00 GMT
 
  • Спасибо
Реакции: baracuda
DEL
 
Последнее редактирование:
В исходном коде приложения на 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;
}

Может есть другие варианты?
 
После того, как осваиваешь использование DateTimeOffsett возвращаться к DateTime больше не захочется
 
Звучит всё настолько просто, но сколько это займёт по времени?
Все намного проще, чем кажется. Особенно если делать, пробовать, изучать, а не рассуждать ) . Все познается в сравнении.
 
Звучит всё настолько просто, но сколько это займёт по времени?
Почти нисколько. DateTimeOffset легче без всяких там конвертаций форматов времени. Он парсит как есть и дает просто отклонение от определенной точки времени, не зависящей от таймзоны. В то время как в DateTime за точку отсчета можно брать время UTC, локальное время.
По этой причине программистами убито сотни или тысячи лет по исправлению багов. Я сам пару часов точно потратил, но с DateTimeOffset зато ни одного бага с конвертацией не правил, так как их не было.
Сами Microsoft рекомендуют отказаться от использования DateTime в новых проектах
 
Вот статья на английском, которая показывает, что у DateTime немало проблем и лучше использовать DateTimeOffset, а DateTime оставить только для поддержки старых библиотек
 
Помогите сравнить два времени.
Пробую код ниже, но он именно считает разницу.
Задача именно не вывести разницу, а сравнить.
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
 
Помогите сравнить два времени.
Пробую код ниже, но он именно считает разницу.
Задача именно не вывести разницу, а сравнить.
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
Что значит сравнить? А вывести разницу - это не сравнить?
 
Что значит сравнить? А вывести разницу - это не сравнить?
Имею ввиду, если 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]
Но хотя уже по идеи таким можно пользоваться.
 
Имею ввиду, если 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
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
Добрый день!
Подскажите, мне нужно, чтобы разница между временем date1 и date была больше или равна 7.25 минут. Какой будет код?
Спасибо.
 
Добрый день!
Подскажите, мне нужно, чтобы разница между временем date1 и date была больше или равна 7.25 минут. Какой будет код?
Спасибо.
Что это за минуты такие - 7.25? Что за формат?
 
Добрый день!
Подскажите, мне нужно, чтобы разница между временем 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
Не нашел в статье конвертацию даты в порядковый вид, как это делает Excel/Google таблицы при помощие формулы ДАТАЗНАЧ (DateValue).
Кто нибудь подскажет как это сделать?
 
Не нашел в статье конвертацию даты в порядковый вид, как это делает Excel/Google таблицы при помощие формулы ДАТАЗНАЧ (DateValue).
Кто нибудь подскажет как это сделать?

Ни разу не возникало необходимости для таких штук. Признаться, с разбегу даже не понял для чего это нужно. Если нужно получить дату в формате числа — есть unixtime, с которым работает весь интернет и для которого есть встроенные методы в DateTimeOffset. А эту штуку вижу впервые )))
 
Последнее редактирование:
Не нашел в статье конвертацию даты в порядковый вид, как это делает Excel/Google таблицы при помощие формулы ДАТАЗНАЧ (DateValue).
Кто нибудь подскажет как это сделать?
В переменную date - нужно указать свою дату
C#:
Развернуть Свернуть Копировать
return (Convert.ToDateTime(project.Variables["date"].Value) - new DateTime(1900,1,1)).TotalDays;
 
  • Спасибо
Реакции: braind
В переменную 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
В переменную date - нужно указать свою дату
C#:
Развернуть Свернуть Копировать
return (Convert.ToDateTime(project.Variables["date"].Value) - new DateTime(1900,1,1)).TotalDays;

Спасибо!

Ни разу не возникало необходимости для таких штук. Признаться, с разбегу даже не понял для чего это нужно. Если нужно получить дату в формате числа — есть unixtime, с которым работает весь интернет и для которого есть встроенные методы в DateTimeOffset. А эту штуку вижу впервые )))
работать с датой в виде порядковых чисел очень удобно в некоторых случаях. Не нужно никуда ничего переводить, просто складываешь/вычитаешь колво дней и все. Сравнивать очень удобно, вытаскивать данные в периоде за последние х дней и т.д.
По сути да, это такой же числовой формат, как Unix, только я уже с ним работаю в таблицах, так что переводить все на Unix нет желания
 
Последнее редактирование:
  • Спасибо
Реакции: Reysh
Получаю дату в виде: 2021-09-24, а мне нужно ее сделать вот в такой вид: 24.09.2021
Подскажите, пожалуйста, как сконвертировать дату?
 
Получаю дату в виде: 2021-09-24, а мне нужно ее сделать вот в такой вид: 24.09.2021
Подскажите, пожалуйста, как сконвертировать дату?
так в статье есть почти готовое решение
83251
 
Тут все понятно, но дату я не через зенку получаю, а паршу ее специально с одного сервиса и это я просто написал сегодняшную дату, она может быть другой.
В переменную "input_date" записать вашу дату - 2021-09-24
C#:
Развернуть Свернуть Копировать
return Convert.ToDateTime(project.Variables["input_date"].Value).ToString("dd.MM.yyyy");
А результат выполнения кода сохранить в нужную переменную
 
  • Спасибо
Реакции: Greez и seowin

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