在.NET中将时间转换为小数

3
有没有一种简单的方法将时间(hh:mm)呈现为十进制值? 例如,01:08应该变成1.13。
我有一个asp:textbox掩码(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" />
4个回答

5
您可以使用TimeSpan的TotalHours属性,如下所示:
DateTime endHour = new DateTime(2010, 1, 2, 5, 30, 0);

double totalHours = new TimeSpan(endHour.Hour, endHour.Minute, 0).TotalHours;

1

首先,您可能会发现使用TimeSpanDateTime更合适。因此,针对您的示例,可以这样做:

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

产生正确的结果。在60之后的m强制计算为十进制。

你不能直接将这个C#挂钩到文本框的onblur事件,因为它在服务器端运行。如果你需要在客户端运行这个代码,则必须使用ajax回调来评估它,或者使用javascript来分割字符串,然后逐个计算每个部分(分钟和秒),然后将结果输出到第二个文本框或标签。


嗯,asp:textbox 上似乎没有 OnBlur 事件。 - henrico
有一个方法 - 但它是客户端的,而不是服务器端的,所以它不会出现在您的Intellisense中 - 您需要手动添加它:Textbox.Attributes.Add("onblur", "my javascript"); - slugster

0
(CDate("01:08").TimeOfDay.TotalHours).ToString("N2"))

2
请添加一些解释。 - Syscall

0
double decimalTime = DateTime.Now.Hour + (double)DateTime.Now.Minute/60

编辑:更好的方法,使用GenEric的TimeSpan想法:

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

谢谢,那么唯一的方法就是拆分值并手动计算吗? - henrico
我认为是这样的;这是一个有点奇怪的请求,我没有看到内置更简单的方法。 - tzaman
好的,我能否在代码后台连接到某个事件来执行这个计算,例如当用户离开文本框(onblur)时? - henrico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接