Преобразование строк часов и минут в дни/часы/минуты в С#?

123
16

У меня есть сумма продолжительности работы Работников в определенный период. Мне нужно преобразовать эту Рабочую Длительность в дни, часы и минуты. Проблема в том, что мой день равен 9 часам, а не 24 часам. Значит, я делю свою продолжительность на 9. Но результат, который я получаю, - в очках, и я не могу преобразовать его в свой точный формат. Ниже приведен мой код:

var Durations = TimeSpan.FromMinutes(db.Attendances.Where(x => x.EmployeeId == id)
.Sum(x => TimeSpan.Parse(x.Duration).TotalMinutes));

var TotalDuration = string.Format("{0}:{1}", Durations.TotalHours, Durations.Minutes);

Этот работает абсолютно нормально. Я получаю результаты в следующем формате:

H:M
8:5
12:7
19:15

Проблема в том, что мне нужно конвертировать часы в "Дни и часы", когда я делю их на 9. Например: 19. Если я делю 19 на 9, я получаю 2.111111 Средство 2 дня и 1 час. Как я могу получить ответ в формате дней и часов?

спросил(а) 2018-04-24T13:16:00+03:00 2 года, 11 месяцев назад
1
Решение
62

Я думаю, что это должно ответить на ваш вопрос:

   TimeSpan s = new TimeSpan(20,0, 0);
int day = (int)s.TotalHours / 9;
int hour = (int)s.TotalHours % 9;
Console.WriteLine($"the duration in day is {day } hour {hour}");

ответил(а) 2018-04-24T13:51:00+03:00 2 года, 11 месяцев назад
44

Вы можете добавить метод расширения для TimeSpan.

public static (int day,int hour) GetDayAndHour(this TimeSpan timeSpan,int dayDuration == 9) {

var number= timeSpan.TotalHours/dayDuration;
int day = (int)Math.Truncate(number);
int hour= (int)Math.Truncate((number-day)*10);
return (day,hour);
}

Я использую С# 7 tuple. Если вы используете предыдущую версию, создайте тип данных костюма или используйте Tuple<int, int>.

ответил(а) 2018-04-24T13:50:00+03:00 2 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема