Convertir chiffre en heure

Résolu
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 - 20 avril 2011 à 15:11
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre 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

9 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
20 avril 2011 à 16:32
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.
3
biolo24fr Messages postés 87 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 28 mai 2013 1
20 avril 2011 à 15:44
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.
0
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 9
20 avril 2011 à 15:54
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
0
biolo24fr Messages postés 87 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 28 mai 2013 1
20 avril 2011 à 16:28
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
20 avril 2011 à 19:15
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)

0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
21 avril 2011 à 08:59
@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).
0
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
21 avril 2011 à 09:17
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]

0
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 9
21 avril 2011 à 09:30
merci a tout les 3 pour les reponse fourni je vous en remercie
Cordialement
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
21 avril 2011 à 11:13
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.
0
Rejoignez-nous