9
votes

Meilleure façon de convertir les minutes totales en format HH: mm?

Je reçois une valeur de retour d'un service Web en minutes, par exemple 538 minutes. J'ai besoin de casser cela en heures et en minutes. Quel est le moyen le plus rapide, dans le code .NET et le code VB6 (deux applications utilisent le service) pour convertir cela des minutes à HH: MM?

merci


0 commentaires

6 Réponses :


3
votes

Prenez le module 60, puis entier-divide de 60.

dans VB, la division Entier utilise \ .


2 commentaires

Vous pouvez enregistrer une division par integer-fracture, puis multiplier le dos et soustraire: 538/60 = 8, 538-8 * 60 = 58, il en résulte donc 8:58 sans savoir à quel point il est de nos jours mais que la division était aussi lente.


Oublier ce problème. Vrai, la division prend généralement quelques cycles d'horloge plus de multiplication. Rien à craindre dans les langues de haut niveau, cependant, puisqu'il s'agit de toutes les cacahuètes comparées à toutes les frais générales, même les compilateurs modernes. Je Devinez que votre solution sera même plus lente, étant donné les frais généraux produites par le Mul et Sub, mais je ne parvenais jamais à comparer l'analyse comparative que si vous envisagez de boucler les calculs un milliard de fois par seconde ou plus.



0
votes

Si vous avez besoin de chaînes, alors: dt.tostring ("HH: mm");

(info)


0 commentaires

12
votes

Ce code doit fonctionner à la fois dans .NET et VB6: xxx

in .net exclusivement, vous devriez pouvoir effectuer ce qui suit (qui doit être testé): xxx

J'espère que cela aide!


3 commentaires

Je pense que NEAL veut des zéros de premier plan. CTYPE (heures, chaîne) ne donnera pas de zéros de tête si des heures <10


@MarkJ vous avez raison. Afin de récupérer le temps correct avec un zéro avancé dans le boîtier nécessaire, vous devez utiliser CSTR et Padleft de la manière suivante: CSTR (heures) .padleft (2, "0" c) & ":" & CSTR (minutes) .Padleft (2, "0" c)


Le deuxième code ne fonctionne pas. Vous obtenez une erreur: System.ArgumentoutofRangeExceptionXception: "Heure, minute et Second Paramètres décrivent une dateTétime non représentable".



6
votes

in .NET Vous avez une classe Timespan pour que vous puissiez faire ce qui suit

Dim t As New TimeSpan(0, 538, 0)

'Then you have the 2 properties
t.Hours
t.Minutes


0 commentaires

2
votes

Si vous devez effectuer des opérations avec d'autres objets DateTime, il serait peut-être utile d'utiliser un objet Timespan, par exemple

    Dim oTS As New TimeSpan(0, 538, 0)
    MessageBox.Show(Format(oTS.Hours, "00") & ":" & Format(oTS.Minutes, "00"))
    Dim startime As DateTime = Date.Now
    Dim newtime As DateTime = startime + oTS
    MessageBox.Show(newtime.ToString("HH:mm"))


0 commentaires

7
votes

dans VB6, vous pouvez simplement utiliser le format (538 / 1440.0, "HH: mm")

VB6 Date Les valeurs peuvent être traitées comme un nombre de jours et il y a 1440 minutes par jour. Ainsi, 538/1440 est le nombre de jours dans vos règles, puis vous pouvez utiliser format


0 commentaires