Преобразование времени в десятичное число в С#
что мне нужно сделать, есть две определенные строки, которые вводится пользователем,
string in = "9:35"; //am
string out = "11:55"; //am
и мне нужно их вычесть, чтобы получить общее количество часов, в которые они были подписаны. Это должно равняться:
string total = "2:20"
тогда мне нужно преобразовать это в десятичное число. так что 2:20 будет
string decimal = "2.33";
Я не знаю, как это сделать, любая помощь будет оценена!
P.S: id также хотел бы вычислить общее количество часов, в течение которых они были проверены, с десятичного числа, поэтому в основном противоположный
Ответы
Ответ 1
DateTime dt1 = DateTime.Parse("11:55");
DateTime dt2 = DateTime.Parse("9:35");
double span = (dt1 - dt2).TotalHours;
Вам действительно нужно "2:20" или это только промежуточный шаг?
Edit: Если вы хотите вернуться, вам просто нужно немного поработать над математикой. Возьмите остаток десятичной дроби и умножьте на 60, затем округлите. Это будут минуты, поэтому просто добавьте их в часы.
Ответ 2
Или вы можете сделать следующее:
decimal dec = Convert.ToDecimal(TimeSpan.Parse("11:30").TotalHours);
// returns: 11.5
Ответ 3
Как насчет этого?
TimeSpan inTime = new TimeSpan(9, 35, 0); //or TimeSpan.Parse("9:35");
TimeSpan outTime = new TimeSpan(11, 55, 0); //or TimeSpan.Parse("11:55");
TimeSpan total = outTime - inTime;
decimal timevalue = total.Hours + (total.Minutes > 0 ? total.Minutes/60 : 0);
string totalString = timevalue.ToString();
Ответ 4
Я знаю, что это очень старый пост, но он первый, который появляется в Google при поиске способов преобразования часов и минут в десятичные часы.
Ни один из этих ответов не работает при работе более 24 часов (например, при работе с часами в период оплаты). Я обработал преобразование следующим образом:
string HoursWorkedThisWeek = "50:08"
//50 hours and 8 minutes
string[] a = HoursWorkedThisWeek.Split(new string[] { ":" }, StringSplitOptions.None);
//a[0] contains the hours, a[1] contains the minutes
decHours = Math.Round(Convert.ToDecimal(a[0]) + (Convert.ToDecimal(a[1]) / 60), 2);
//Result is 50.13