Преобразование времени в десятичное число в С#

что мне нужно сделать, есть две определенные строки, которые вводится пользователем,

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