2010-05-05 6 views
3

Existe-t-il un moyen facile de présenter l'heure (hh: mm) comme une valeur décimale? Exemple, 01:08 devrait devenir 1,13.Convertir le temps en décimales .net

J'ai un asp: textbox masqué (ajax) comme heure avec le format de masque "99:99". À côté de cette case, je dois présenter la valeur saisie en décimal.

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

Répondre

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

Edit: Une meilleure façon, en utilisant TimeSpan idée GÉNÉRIQUE:

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

Merci, donc le seul moyen est de diviser la valeur et de calculer manuellement? – henrico

+0

Je le pense; c'est une sorte de demande bizarre, je ne vois pas qu'il y ait un moyen plus simple. – tzaman

+0

Ok, y a-t-il un événement dans lequel je peux accrocher ce calcul, comme quand l'utilisateur quitte la zone de texte (onblur)? – henrico

5

Vous pouvez utiliser la TotalHours propriété du TimeSpan, comme ceci:

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

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

+1, en utilisant un 'TimeSpan' est utile. – tzaman

1

Première place, vous pourriez trouver plus approprié d'utiliser un TimeSpan plutôt qu'un DateHeure. Donc pour votre exemple, ceci:

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

produit le bon résultat. Le m après le 60 oblige ce calcul à être décimal.

Vous ne pouvez pas accrocher ce C# directement à l'onblur de la zone de texte, car il fonctionne côté serveur. Si vous avez besoin de cela pour exécuter le côté client, vous devrez soit utiliser un rappel ajax pour l'évaluer, soit utiliser javascript pour couper la chaîne, puis calculer chaque bit (minutes et secondes) individuellement, puis afficher le résultat dans la deuxième zone de texte ou étiquette.

+0

Hmm, il ne semble pas être un événement OnBlur sur le henrico

+0

Il est - mais il est côté client, pas côté serveur, donc il n'est pas dans votre intellisense - vous devez l'ajouter manuellement: Textbox.Attributes .Add ("onblur", "mon javascript"); – slugster