Convertir chiffre en heure [Résolu]

Messages postés
453
Date d'inscription
dimanche 20 août 2006
Dernière intervention
11 janvier 2013
- - Dernière réponse : foliv57
Messages postés
423
Date d'inscription
vendredi 17 novembre 2006
Dernière intervention
15 juillet 2014
- 21 avril 2011 à 11:13
bonjour,
voila dans une textbox j'ai le chiffre "8" je ne parviens pas à le convertir en "08:00" heure .
J'ai essayer avec cdate toujours sans reponse.

Quelqu'un aurai t-il une idée ??

Merci par avance
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
423
Date d'inscription
vendredi 17 novembre 2006
Dernière intervention
15 juillet 2014
7
3
Merci
Bonjour,

Voici une solution possible pour convertir le chiffre en heure :
Dim maDate As New DateTime(Now.Year, Now.Month, Now.Day, CType(Me.TextBox1.Text, Integer), 0, 0)
Dim maChaine as String = maDate.ToString("HH:mm")


Sinon il y a le MasquedTextBox avec un masque horraire.

Ou mieux, le DateTimePicker au format horraire.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de foliv57
Messages postés
87
Date d'inscription
jeudi 16 janvier 2003
Dernière intervention
28 mai 2013
1
0
Merci
Salut,

admettons que ton textbox s'appelle textbox1
Dim d As DateTime
Dim d2 As DateTime

d = Now
d2 = d.ToShortDateString & " 0" & me.textbox1.text &":" & "00"

Me.TextBox2.Text = d2.ToShortTimeString

-----------------------------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Commenter la réponse de biolo24fr
Messages postés
453
Date d'inscription
dimanche 20 août 2006
Dernière intervention
11 janvier 2013
7
0
Merci
c'est ce que j'ai fais malheuresement se n'est pas propre et dans le cas ou il y a pas 8h met 10h sa ne fonctionne plus.

en gros j'ai fait en tb1.text = format(tb1.text,"00") & ":00"

Même ce bout de code n'est pas propre.
Merci comme même
Commenter la réponse de scromania
Messages postés
87
Date d'inscription
jeudi 16 janvier 2003
Dernière intervention
28 mai 2013
1
0
Merci
facile de contourner ça :

Dim d As DateTime
Dim d2 As DateTime

d = Now
d2 = d.ToShortDateString & " " & Microsoft.VisualBasic.Right("0" & Me.TextBox1.Text, 2) & ":00"

Me.TextBox2.Text = d2.ToShortTimeString



Comme ça si il met deux chiffres 10 au lieu de 8 on aura 10 quand même et non
-----------------------------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Commenter la réponse de biolo24fr
Messages postés
14385
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
17 février 2019
153
0
Merci
Bonjour,

Suggestion d'amélioration, à la place de :
CType(Me.TextBox1.Text, Integer)
Préférez :
CInt(Me.TextBox1.Text)
ou
Integer.Parse(Me.TextBox1.Text)

Commenter la réponse de NHenry
Messages postés
423
Date d'inscription
vendredi 17 novembre 2006
Dernière intervention
15 juillet 2014
7
0
Merci
@NHenry

Pour Integer.Parse c'est exacte.

Par contre, pour CInt, ce n'est pas une amélioration. C'est un relicat du VB6 qui revient exactement au même que CType.

Pour illustrer (car sur ce coup la nous sommes pointilleux ;)

Si dans votre code VB.NET vous faite par exemple :
Dim varInt1 As Integer = CType("1", Integer)
Dim varInt2 As Integer = CInt("1")
Dim varInt3 As Integer = Integer.Parse("1")


Le code compilé sera ceci :
Dim varInt1 As Integer = Conversions.ToInteger("1")
Dim varInt2 As Integer = Conversions.ToInteger("1")
Dim varInt3 As Integer = Integer.Parse("1")


On remarque donc que CInt comme CType est traduit Conversions.ToInteger.

Ensuite, si nous cherchons un peut plus loin encore, la fonction Conversions.ToInteger fait ceci :
Public Shared Function ToInteger(ByVal Value As String) As Integer
    Dim num As Integer
    If (Value Is Nothing) Then
        Return 0
    End If
    Try 
        Dim num2 As Long
        If Utils.IsHexOrOctValue(Value, (num2)) Then
            Return CInt(num2)
        End If
        num = CInt(Math.Round(Conversions.ParseDouble(Value)))
    Catch exception As FormatException
        Throw New InvalidCastException(Utils.GetResourceString("InvalidCast_FromStringTo", New String() { Strings.Left(Value, &H20), "Integer" }), exception)
    End Try
    Return num
End Function


Alors que la fonction Integer.Parse fait cela :
Friend Shared Function ParseInt32(ByVal s As String, ByVal style As NumberStyles, ByVal info As NumberFormatInfo) As Integer
    Dim stackBuffer As Byte* = stackalloc Byte[&H72]
    Dim number As New NumberBuffer(stackBuffer)
    Dim num As Integer = 0
    Number.StringToNumber(s, style, (number), info, False)
    If ((style And NumberStyles.AllowHexSpecifier) <> NumberStyles.None) Then
        If Not Number.HexNumberToInt32((number), (num)) Then
            Throw New OverflowException(Environment.GetResourceString("Overflow_Int32"))
        End If
        Return num
    End If
    If Not Number.NumberToInt32((number), (num)) Then
        Throw New OverflowException(Environment.GetResourceString("Overflow_Int32"))
    End If
    Return num
End Function


La il est claire que la méthode est différente, mais on constate que même dans ce cas, la fonction Conversions.ToInteger fait un Conversions.ParseDouble qui elle-même fait un Double.Parse (la boucle est bouclée).
Commenter la réponse de foliv57
Messages postés
14385
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
17 février 2019
153
0
Merci
Bonjour,

Je suis d'accord que Cint et Ctype( , Integer) c'est la même chose, mais je trouve plus clair et surtout plus concis.
Et le Integer.Parse est plus explicite en lui même.

Usuellement, le CInt, je l'utilise pour convertir des numérique vers des numériques et le Parse est réservé à une entrée de type chaine.

Sinon, je ne connaissais pas cette synatxe :
Dim stackBuffer As Byte* = stackalloc Byte[&H72]

Commenter la réponse de NHenry
Messages postés
453
Date d'inscription
dimanche 20 août 2006
Dernière intervention
11 janvier 2013
7
0
Merci
merci a tout les 3 pour les reponse fourni je vous en remercie
Cordialement
Commenter la réponse de scromania
Messages postés
423
Date d'inscription
vendredi 17 novembre 2006
Dernière intervention
15 juillet 2014
7
0
Merci
surtout plus concis


Oui, ca c'est sur =D, ca fait gagner pas mal de caractères. J'avoue que je me suis forcer les premières fois car je ne voulais plus laisser de trace de VB6 pour faciliter la lecture aux personnes maitrisant le C# (même si CType n'existe pas non plus en C#). La syntaxe met un peut plus en avant le CAST d'un objet dans un autre Type.

Pour
Dim stackBuffer As Byte* = stackalloc Byte[&H72]


J'ai oublié de préciser que le détail des fonctions est du code décompilé. En gros Byte* est un pointeur vers un Byte.

Pour faire simple, c'est la traduction lors du passage d'un paramètre par référence:
Public Sub Test()
  Dim monByte as Byte
  maFonction(monByte)
End Sub

Public Sub maFonction(ByRef value As Byte)
  value = 11
End Sub


Pour faire, compliquer, la syntaxe correspond plus ou moins à ceci :
Dim stackBufferSize As Integer = Runtime.InteropServices.Marshal.SizeOf(GetType(Byte))
Dim stackBuffer As IntPtr = Runtime.InteropServices.Marshal.AllocHGlobal(stackBufferSize)


Je ne m'étends pas plus, sinon nous allons pourrir le post de départ =D

Pour plus d'informations, ce post traite de facon plus claire le sujet.
Commenter la réponse de foliv57

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.