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

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113
  • Спасибо
Реакции: art22

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
А как можно в место 1 поставить переменную {-Variable.rez-}
C#:
return DateTime.Now.AddDays(Convert.ToInt32(project.Variables["rez"].Value)).ToString("dd.MM.yyyy");
P.s. Писал в мобиле, мог где-то опечататься
 
  • Спасибо
Реакции: art22

strgfhfg

Новичок
Регистрация
09.04.2022
Сообщения
1
Благодарностей
0
Баллы
1
напишите в поиске интернета есть центр который проникает в мозг людей через высокие технологий читайте передаите всем
 

Phoenix78

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

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Не хватает примеров как англ дату переводить в русскую, чет не получается.

UDP. Разобрался
C#:
string s = "08/01/2022 20:24:53";
//string s = project.Variables["Data_first_message_1"].Value;
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");//задаем языковые (региональные) стандарты
DateTime dt = DateTime.ParseExact(s, "MM/dd/yyyy HH:mm:ss", culture); //указываем формат для парсинга
return dt.ToString("dd MMMM yyyy", new System.Globalization.CultureInfo("ru-RU"));
 
Последнее редактирование:

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
Не хватает примеров как англ дату переводить в русскую.

C#:
string s = "08/01/2022 20:24:53";
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");//задаем языковые (региональные) стандарты
DateTime dt = DateTime.ParseExact(s, "MM/dd/yyyy HH:mm:ss", culture); //указываем формат для парсинга
return dt.ToString("dd MMMM yyyy", new System.Globalization.CultureInfo("ru-RU"));
Должно так работать:
C#:
string s = "08/01/2022 20:24:53";
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");//задаем языковые (региональные) стандарты
DateTime dt = DateTime.Parse(s, culture);
return dt.ToString("dd MMMM yyyy", new System.Globalization.CultureInfo("ru-RU"));
Шаблон ниже ↓
 

Вложения

  • Спасибо
Реакции: Mikhail B.

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
C#:
string s = "08/01/2022 20:24:53";
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");//задаем языковые (региональные) стандарты
DateTime dt = DateTime.Parse(s, culture);
return dt.ToString("dd MMMM yyyy", new System.Globalization.CultureInfo("ru-RU"));
А оказывается не обязательно указывать формат парсинга. Спасибо.
 
  • Спасибо
Реакции: djaga

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
А оказывается не обязательно указывать формат парсинга. Спасибо.
Да, можно и так)
Просто вы сказали, что не хватает примера)
C#:
string s = "08/01/2022 20:24:53";
DateTime dt = DateTime.Parse(s);
return dt.ToString("dd MMMM yyyy");
 
  • Спасибо
Реакции: Sho и Mikhail B.

fridayman

Client
Регистрация
25.03.2018
Сообщения
169
Благодарностей
260
Баллы
63
Все время возвращаюсь к этой статье и постоянно хочется еще раз нажать кнопку "спасибо". Невероятно крутые примеры, с каждым новым изучением темы данный материал раскрывается свежими смыслами.
 
  • Спасибо
Реакции: Mikhail B.

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Сделал код который считает как давно была переписка. По кол-ву дней можем уже решать, стоит ее обрабатывать или лучше пропустить))

Когда вопрос по датам эта статья у меня в закладках))

C#:
string s = project.Variables["Data_unread_mess"].Value;
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("ru-RU");//задаем языковые (региональные) стандарты
DateTime dt = DateTime.Parse(s, culture);
DateTime dt2 = DateTime.Now;
int diff = dt2.Subtract(dt).Days;// вернет целое количество дней
return diff;
 
Последнее редактирование:
  • Спасибо
Реакции: j2082192 и one

cmvvo

Client
Регистрация
07.07.2019
Сообщения
38
Благодарностей
16
Баллы
8
Как получить дату предыдущего дня?
 

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
43
  • Спасибо
Реакции: viruuses и cmvvo

Ostap1992

Client
Регистрация
26.02.2020
Сообщения
44
Благодарностей
5
Баллы
8
всем добрый день
у меня вот такой формат времени который лежит в переменной 28.08.2024 22:26:37 и мне нужно преобразовать его в unixtime
по мимо этого чтобы рандомная часть была 22:26:37
помогите

ну или просто чтобы сделать unixtime
 

fridayman

Client
Регистрация
25.03.2018
Сообщения
169
Благодарностей
260
Баллы
63
всем добрый день
у меня вот такой формат времени который лежит в переменной 28.08.2024 22:26:37 и мне нужно преобразовать его в unixtime
по мимо этого чтобы рандомная часть была 22:26:37
помогите

ну или просто чтобы сделать unixtime
если я правильно понял и надо отбросить время (каким бы оно ни было), то есть получить дату на начало суток, то это подойдет:

C#:
DateTime dateTime = DateTime.Parse("28.08.2024 22:26:37");
dateTime = dateTime.AddMinutes(- dateTime.Minute); // обнуляем минуты
dateTime = dateTime.AddHours(- dateTime.Hour); // обнуляем часы
dateTime = dateTime.AddSeconds(- dateTime.Second); // обнуляем секунды

// установка времени
DateTime dt = new DateTime(1970, 1, 1,0,0,0,DateTimeKind.Utc).ToLocalTime();

// время в UnixTime
return (long)(dateTime - dt).TotalSeconds;
 

cmvvo

Client
Регистрация
07.07.2019
Сообщения
38
Благодарностей
16
Баллы
8
Последнее редактирование:

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
43
А как можно получить дату предыдущего дня, но не сегодняшнего, а произвольно заданного?
Если я вас правильно понял

C#:
Random rnd = new Random();
return DateTime.Now.AddDays(rnd.Next(100)*-1);
 
  • Спасибо
Реакции: cmvvo

cmvvo

Client
Регистрация
07.07.2019
Сообщения
38
Благодарностей
16
Баллы
8
Если я вас правильно понял

C#:
Random rnd = new Random();
return DateTime.Now.AddDays(rnd.Next(100)*-1);
Приведу пример: есть произвольная дата, например 2022.09.01, и как от этой заданной даты, получить предыдущий день в том же формате, а именно 2022.08.31 ?
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 261
Благодарностей
679
Баллы
113
Приведу пример: есть произвольная дата, например 2022.09.01, и как от этой заданной даты, получить предыдущий день в том же формате, а именно 2022.08.31 ?
C#:
DateTime date = new DateTime(2022, 9, 1);
return date.AddDays(-1).ToString("yyyy.MM.dd");
 
  • Спасибо
Реакции: emil089 и cmvvo

XKloev

Client
Регистрация
16.01.2018
Сообщения
12
Благодарностей
2
Баллы
3
Подскажите, мне нужно брать строки, которые не старше полугода. Можно как-то собрать последние 6 месяцев от текущего? Сейчас октябрь, нужны апрель-сентябрь.
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
Подскажите, мне нужно брать строки, которые не старше полугода. Можно как-то собрать последние 6 месяцев от текущего? Сейчас октябрь, нужны апрель-сентябрь.
C#:
string date = "22.05.2021"; //Дата
decimal maxMonth = 6M; //Максимум месяцев разницы
DateTime now_date = DateTime.Now; //Берем дату "сейчас"
DateTime date_date = DateTime.Parse(date); //Парсим дату из текста

var subtract = now_date.Subtract(date_date); //Вычитаем даты
decimal month_count = subtract.Days / (365.2425M / 12); //Получаем количество месяцев

if (month_count <= maxMonth) return $"is OK, total month: {Math.Round(month_count,0)}"; //Проверка
else throw new Exception($"More than {maxMonth} month"); //Если больше.
 
  • Спасибо
Реакции: djaga
Регистрация
23.03.2015
Сообщения
1 218
Благодарностей
751
Баллы
113
Ребята помогите сделать из такой даты: "Wed, 26 Oct 2022 12:32:14 " Такую:"26.10.2022
Пожалуйста
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
819
Благодарностей
231
Баллы
43
Регистрация
23.03.2015
Сообщения
1 218
Благодарностей
751
Баллы
113

Reysh

Client
Регистрация
02.12.2018
Сообщения
198
Благодарностей
133
Баллы
43
Ребята помогите сделать из такой даты: "Wed, 26 Oct 2022 12:32:14 " Такую:"26.10.2022
Пожалуйста
C#:
DateTime input = Convert.ToDateTime(project.Variables["input"].Value);
project.Variables["output"].Value = input.ToString("d");
В переменную input входящую дату, в переменной output будет результат
 
  • Спасибо
Реакции: KolkaPetkinSyn
Регистрация
23.03.2015
Сообщения
1 218
Благодарностей
751
Баллы
113
C#:
DateTime input = Convert.ToDateTime(project.Variables["input"].Value);
project.Variables["output"].Value = input.ToString("d");
В переменную input входящую дату, в переменной output будет результат
Спасибо большое
 

TwistDanceR

Client
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
DateTime to UnixTime C#. Не забудьте добавить System.Globalization в using.
Заказчик сказал, что не нашёл решения тут. Нате пожалуйста)

C# DateTime to UnixTimeStamp:
// По строчечкам для осознания логики. Кому нужен этот одно(г*вн*)строчный код))
string dateToParse = "Mon Nov 14 22:24:25 +0000 2022";
DateTime parsedDate;
string pattern = "ddd MMM dd HH:mm:ss +ffff yyyy";
DateTime.TryParseExact(dateToParse, pattern, CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate);
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (parsedDate.ToLocalTime() - epoch);
return span.TotalSeconds;
 
  • Спасибо
Реакции: digitalboy228

emil089

Client
Регистрация
04.12.2022
Сообщения
6
Благодарностей
1
Баллы
3
Подскажите пожалуйста как получить все даты в течении 3-х месяцев.
Например, есть дата 11.11.2000, мне нужно получить все даты на 3 месяца вперед. Чтоб выдало
11.11.2000
12.11.2000
13.11.2000
14.11.2000
И т.д.
 
Последнее редактирование:

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
Подскажите пожалуйста как получить все даты в течении 3-х месяцев.
Например, есть дата 11.11.2000, мне нужно получить все даты на 3 месяца вперед. Чтоб выдало
11.11.2000
12.11.2000
13.11.2000
14.11.2000
И т.д.
Генерация списка дат с даты +3 месяца:
int howManyMonthsToRecord = 3; // Сколько месяцев генерировать
string startDate = "11.11.2000"; // Начальная дата

DateTime starDateTime = DateTime.Parse(startDate);
DateTime endDateTime = starDateTime.AddMonths(howManyMonthsToRecord);

DateTime tempDateTime = starDateTime;
do
{
    project.Lists["listZM"].Add(tempDateTime.ToString("dd.MM.yyyy"));
    tempDateTime = tempDateTime.AddDays(1);
} while (tempDateTime.Ticks <= endDateTime.Ticks);
upd: правка + добавил шаблон для тестов
 

Вложения

  • Спасибо
Реакции: dgreen, Sho и emil089

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
Подскажите пожалуйста как получить все даты в течении 3-х месяцев.
Например, есть дата 11.11.2000, мне нужно получить все даты на 3 месяца вперед. Чтоб выдало
11.11.2000
12.11.2000
13.11.2000
14.11.2000
И т.д.
Генерация списка дат с даты +3 месяца:
int howManyMonthsToRecord = 3; // Сколько месяцев генерировать
string startDate = "11.11.2000"; // Начальная дата

DateTime starDateTime = DateTime.Parse(startDate);
DateTime endDateTime = starDateTime.AddMonths(howManyMonthsToRecord);

DateTime tempDateTime = starDateTime;
do
{
    project.Lists["listZM"].Add(tempDateTime.ToString("dd.MM.yyyy"));
    tempDateTime = tempDateTime.AddDays(1);
} while (tempDateTime.Ticks <= endDateTime.Ticks);
upd: правка + добавил шаблон для тестов
Немного поправил код и попрактиковался:

1. Вариант, когда нужно сгенерировать очень много дат с сохранением скорости.
Генерация списка дат в заданном промежутке PLINQ:
int howManyMonthsToRecord = 1000;
string startDate = "11.11.2000";
project.Lists["listZM"].Clear(); // можно удалить, если не нужна очистка перед записью

DateTime starDateTime = DateTime.Parse(startDate);
DateTime endDateTime = starDateTime.AddMonths(howManyMonthsToRecord);
project.Lists["listZM"].AddRange(Enumerable.Range(0, (endDateTime - starDateTime).Days + 1)
                                           .AsParallel()
                                           .WithDegreeOfParallelism(Environment.ProcessorCount)
                                           .Select(i => starDateTime.AddDays(i))
                                           .Select(d => d.ToString("dd.MM.yyyy"))
                                           .ToArray());

2. Вариант, когда нужно сгенерировать быстро, но не очень много. Тогда данный вариант будет выигрышнее по скорости.
Генерация списка дат в заданном промежутке LINQ:
int howManyMonthsToRecord = 5;
string startDate = "11.11.2000";
project.Lists["listZM"].Clear();

DateTime starDateTime = DateTime.Parse(startDate);
DateTime endDateTime = starDateTime.AddMonths(howManyMonthsToRecord);

var dates = Enumerable.Range(0, (endDateTime - starDateTime).Days + 1)
                                      .Select(i => starDateTime.AddDays(i))
                                      .Select(d => d.ToString("dd.MM.yyyy")).ToArray();
project.Lists["listZM"].AddRange(dates);
Оба варианта немного сложнее понять, но быстрее работают, чем прошлый мой ответ.
Очень надеюсь, что это было полезно. ;-)

Приложил шаблон для тестов ↓
 

Вложения

emil089

Client
Регистрация
04.12.2022
Сообщения
6
Благодарностей
1
Баллы
3
Вот за это я люблю комьюнити зенки, помогут даже ночью))). Огромное спасибо за помощь
 

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