Преобразовать время в десятичные дроби в .net - PullRequest
3 голосов
/ 05 мая 2010

Есть ли простой способ представить время (чч: мм) в виде десятичного значения? Например, 01:08 должно стать 1,13.

У меня есть текстовое поле asp: в маске (ajax) как время с форматом маски "99:99". Рядом с этим полем мне нужно представить введенное значение в десятичном виде.

<asp:TextBox ID="time" runat="server" /> hh:mm ([time in decimal format])
<ajaxToolkit:MaskedEditExtender runat="server" Mask="99:99" TargetControlID="time" MaskType="Time" />

Ответы [ 3 ]

5 голосов
/ 05 мая 2010

Вы можете использовать свойство TotalHours для TimeSpan, например:

DateTime endHour = new DateTime(2010, 1, 2, 5, 30, 0);

double totalHours = new TimeSpan(endHour.Hour, endHour.Minute, 0).TotalHours;
1 голос
/ 05 мая 2010

Прежде всего, вы можете найти более подходящим использовать TimeSpan вместо DateTime . Итак, для вашего примера, это:

TimeSpan t = new TimeSpan(0, 1, 8);
decimal d = t.Minutes + (t.Seconds / 60m);
Console.WriteLine(d.ToString());

дает правильный результат. m после 60 приводит к десятичному расчету.

Вы не можете подключить этот C # непосредственно к onblur текстового поля, так как он работает на стороне сервера. Если вам это нужно для запуска на стороне клиента, вам придется либо использовать обратный вызов ajax для его оценки, либо использовать javascript, чтобы разрезать строку, затем вычислить каждый бит (минуты и секунды) по отдельности, а затем вывести результат во второе текстовое поле или этикетка.

0 голосов
/ 05 мая 2010
double decimalTime = DateTime.Now.Hour + (double)DateTime.Now.Minute/60

Редактировать: Лучше, используя идею GenEric TimeSpan:

double hours = new TimeSpan(DateTime.Now.Hour, 
                            DateTime.Now.Minute, 
                            0).TotalHours;
...