Работа со временем C#

Deisler

Client
Регистрация
26.10.2019
Сообщения
482
Благодарностей
183
Баллы
43
Всем привет.

Есть 2 задачи :

1. Сравнить 2 даты и вернуть ответ - сколько между первой и второй датой прошло времени. Сложность именно в там как вывести в нужном мне виде.

C#:
// парсим дату из переменной
DateTime Day_1 = DateTime.Parse(project.Variables["Start"].Value);
DateTime Day_2 = DateTime.Parse(project.Variables["End"].Value);

// сравниваем дату завершения с датой начала
TimeSpan delta = Day_2 - Day_1;

return delta.ToString();
Выводит ответ в формате 1.02:52:00 (где 1 это дней, 02 это часов, 52 - минут и 00 секунд)

Подскажите как получить ответ в формате "1 02:52" (то есть день разделен пробелом, а не точкой и во времени нет секунд)

2. Второй вопрос по той же теме.

Есть 3 промежeтка времени:
1-й промежуток с 21 декабря 22:00 по 22 декабря 02:30
2-й промежуток с 22 декабря 18:45 по 23 декабря 08:45
3-й промежуток с 23 декабря 21:00 по 24 декабря 05:00

нужно вычислить сколько часов и минут попадает в заданные промежутки 22 числа (то есть с 00:00 до 2.30 + c 18:45 до 00:00)
Итого ответ должен быть 2:30 + 4:15 = 6:45

Подскажите как произвести подобное вычисление ?
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
400
Баллы
63
1. В timespan так же есть возможность настроить вывод в строку:
C#:
return delta.ToString(@"dd\ hh\:mm");
2. Пример простенький, чтобы понять куда двигаться (можно вместо if-ов свитч запилить):
C#:
DateTime dt1 = new DateTime(2020,12,22,22,00,00);
DateTime dt2 = new DateTime(2020,12,23,2,30,00);
//эталон, с которым сравниваем
DateTime dtref = new DateTime(2020,12,22);
//если дата1 равна эталоннной,
if (dt1.Day == dtref.Day && dt2.Day > dtref.Day)
{
    //добавляем к эталону день и вычитаем из него дату1
    TimeSpan diff =(dtref.AddDays(1))-dt1;
    return diff.ToString();   
}
//если дата1 меньше эталона, а дата2 больше
else if (dt1.Day < dtref.Day && dt2.Day == dtref.Day)
{
    //вычитаем из даты2 эталон
    TimeSpan diff = dt2-dtref;
    return diff.ToString();
}
 
  • Спасибо
Реакции: Deisler и bizzon

Deisler

Client
Регистрация
26.10.2019
Сообщения
482
Благодарностей
183
Баллы
43
1. В timespan так же есть возможность настроить вывод в строку:
C#:
return delta.ToString(@"dd\ hh\:mm");
2. Пример простенький, чтобы понять куда двигаться (можно вместо if-ов свитч запилить):
C#:
DateTime dt1 = new DateTime(2020,12,22,22,00,00);
DateTime dt2 = new DateTime(2020,12,23,2,30,00);
//эталон, с которым сравниваем
DateTime dtref = new DateTime(2020,12,22);
//если дата1 равна эталоннной,
if (dt1.Day == dtref.Day && dt2.Day > dtref.Day)
{
    //добавляем к эталону день и вычитаем из него дату1
    TimeSpan diff =(dtref.AddDays(1))-dt1;
    return diff.ToString();  
}
//если дата1 меньше эталона, а дата2 больше
else if (dt1.Day < dtref.Day && dt2.Day == dtref.Day)
{
    //вычитаем из даты2 эталон
    TimeSpan diff = dt2-dtref;
    return diff.ToString();
}
Огромное спасибо)
 

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