Programme pour convertir le temps en secondes au format hh: mm: ss
Je suis en train de faire un programme simple pour convertir un temps donné en secondes à hh:mm:ss. Mais pour certains, en particulier les valeurs d'entrée, il produit un mauvais format de l'heure. C'est ce que j'ai essayé:
Public Class Form1
Dim Hours, Minutes, Seconds As Integer
Private Sub btnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReset.Click
lblHours.Text = "00"
lblMinutes.Text = "00"
lblSeconds.Text = "00"
txtTimeSeconds.Text = ""
txtFormattedTime.Text = ""
End Sub
Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate1.Click
Seconds = Integer.Parse(txtTimeSeconds.Text)
Hours = Seconds / 3600
Seconds = Seconds Mod 3600
Minutes = Seconds / 60
Seconds = Seconds Mod 60
lblHours.Text = Hours.ToString.PadLeft(2, "0"c)
lblMinutes.Text = Minutes.ToString.PadLeft(2, "0"c)
lblSeconds.Text = Seconds.ToString.PadLeft(2, "0"c)
txtFormattedTime.Text = Hours.ToString.PadLeft(2, "0"c) & ":" & Minutes.ToString.PadLeft(2, "0"c) & ":" & Seconds.ToString.PadLeft(2, "0"c)
End Sub
End Class
Il fonctionne lorsque la valeur d'entrée est de 30:
Il ne fonctionne pas lorsque la valeur d'entrée est de 31:
Qu'ai-je fait de mal? Comment puis-je résoudre ce problème?
source d'informationauteur Failed_Noob
Vous devez vous connecter pour publier un commentaire.
Il est classe .NET appelé TimeSpan qui rend votre code simple et élégant.
Exemple:
Visual Basic a deux de la division opérateurs,
/
et\
. L'opérateur /produit un résultat qui est de type Double. Vous calculez 31 /60 = 0.51666... la prochaine attribuer ce résultat à un Entier, ce qui nécessite l'arrondissement. Ainsi, la production de 1, pas 0.Vous souhaitez utiliser le
\
de l'opérateur, l'opérateur de division entière. Il tronque le résultat.J'espère que ce code sera utile
Vous êtes en utilisant des entiers pour stocker vos données, mais la division vous donne doubles. Lors de la conversion de revenir à des nombres entiers, il obtient arrondie au chiffre rond. Afin de 0,5 devient 0, mais 0.51 devient 1.
Pour la txtformattedtime.texte=... je pense que "l'ispan.tostring" marcherait aussi bien.
Je sais que cela a déjà été répondu depuis un moment maintenant, mais j'ai pensé que je pourrais partager ma solution pour le problème à portée de main. Si vous placez le nombre de secondes dans une
TimeSpan
objet, vous pouvez facilement extraire les jours, heures, minutes, secondes et fractions de secondes directement à l'aide deTimeSpan.toString()
méthode. À l'aide d'une forme identique et les noms d'objet, j'ai utilisé le code suivant pour obtenir les résultats souhaités.Visite ici pour plus d'informations sur la méthode utilisée.