IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[TIME] Afficher un intervale de temps.


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Par défaut [TIME] Afficher un intervale de temps.
    Bonjour,

    Je suis en train d'essayer de récupérer un intervalle de temps entre 2 dates de type :

    HH:MM:SS

    J'ai essayé ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    date1 = Convert.ToDateTime(rdrVsd.GetValue(1))
    date2 = Convert.ToDateTime(rdrVsd.GetValue(2))
     
    interval = date1 - date2
    Avec temps de type TimeSpan.

    Mais quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MessageBox.Show(interval)
    ça me dis :

    Erreur 3 Une valeur de type 'System.TimeSpan' ne peut pas être convertie en 'String'. C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2005\Projects\TDB\TDB\TEST.vb 53 25 TDB
    Pouvez vous m'aider?

    Merci,

    .Matt

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2009
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 99
    Par défaut
    Salut,

    Peux-être trouveras-tu une réponse ici : http://sqlpro.developpez.com/cours/gestiontemps/

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(interval.ToString("hh:mm.ss"))
    Ne fonctionne pas ?

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(interval.ToString("hh:mm.ss"))

    Voici le message qui m'affiche :

    Erreur 2 La résolution de surcharge a échoué, car aucun 'ToString' accessible n'accepte ce nombre d'arguments. C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2005\Projects\TDB\TDB\TEST.vb 54 25 TDB

    De plus par rapport à ma valeur de temps je veux que ce soit heure minute seconde car je compte plus tard créer des graphiques de performance avec Crystal Report sur ces valeurs.

    Il me faut en fait le meilleur type de valeur pour cet intervalle.

    Que me conseillez vous?


    Merci d'avance,

    .Matt

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Sorry, c'est ToString() tout court et ça renvoit ce que tu cherches.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Par défaut
    Bonjour,
    Il est possible de faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    date1 = Convert.ToDateTime(rdrVsd.GetValue(1))
    date2 = Convert.ToDateTime(rdrVsd.GetValue(2))
    dim diff as long = DateDiff(DateInterval.Second, date1, date2)
    diff t'est donné en seconde, tu n'as qu'a convertir en heure, minutes, secondes...
    Voici une solution comme d'autre.

  7. #7
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    Sorry, c'est ToString() tout court et ça renvoit ce que tu cherches.
    C'est juste le paramètre .ss qui est de trop avec .ToString("hh:mm") sa va marcher.
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  8. #8
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Citation Envoyé par GarsDuCalvados Voir le message
    Erreur 2 La résolution de surcharge a échoué, car aucun 'ToString' accessible n'accepte ce nombre d'arguments. C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2005\Projects\TDB\TDB\TEST.vb 54 25 TDB
    ca veux donc dire qu'il n'existe pas de toString surchargé pour le TimeSpan, donc que l'on mette .ToString("hh:mm.ss") ou .ToString("hh:mm") l'erreur sera la même vu que le nombre et le type d'argument est le même...

    Il te faut donc faire comme Sergejack à dit, un simple toString() ou t'amuser à composer toi même le champs du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox(interval.Hours & ":" & interval.Minutes & ":" & interval.Seconds)

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Le plus souple pourrait être pour toi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DateTime dt = new DateTime(1,1,1) + DateInterval;
     
    ...dt.ToString("HH:mm")...
    à la condition que ton interval de temps ne dépasse pas les 24h.

  10. #10
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    ca veux donc dire qu'il n'existe pas de toString surchargé pour le TimeSpan, donc que l'on mette .ToString("hh:mm.ss") ou .ToString("hh:mm") l'erreur sera la même vu que le nombre et le type d'argument est le même...
    avec .ToString("hh:mm") sa marche
    je te renvoie a cet article
    http://plasserre.developpez.com/v4-5.htm
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  11. #11
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Citation Envoyé par lilroma Voir le message
    avec .ToString("hh:mm") sa marche
    je te renvoie a cet article
    http://plasserre.developpez.com/v4-5.htm
    Lit bien ton cours (que je connais très bien )

    La première partie traite des DateTime, c'est la que tu y retrouve le système de formatage.
    Après tu as la partie où il parle du TimeSpan, celui ci n'est pas sujet à ce formatage (voir plus bas, référence à MSDN), car il ne représente pas une date mais bien un intervalle de temps.
    Quand tu soustrait une date moins une autre tu obtiens un intervalle de temps et non une date comme marquer dans le cours :
    Citation Envoyé par "Ph. Lasserre"
    Variable "temps"

    Un TimeSpan est une unité de temps (un intervalle de temps) exprimée en jours, heures, minutes, secondes;

    Un TimeSpan initialisé avec 1.0e+13 graduations représente "11.13:46:40", ce qui correspond à 11 jours, 13 heures, 46 minutes et 40 secondes.

    L'espace de nom System.DateTime. contient une multitude de membre:

    Add, Substrat

    On peut ajouter ou soustraire un TimeSpan à un DateTime, on obtient un DateTime.

    En clair on peut ajouter à une date une durée, on obtient une date.

    ' Quel sera la date dans 36 jours?.
    Dim today As System.DateTime
    Dim duration As System.TimeSpan
    Dim answer As System.DateTime

    today = System.DateTime.Now
    duration = New System.TimeSpan(36, 0, 0, 0)
    answer = today.Add(duration)

    On peut ajouter ou soustraire 2 dates, on obtient une TimeSpan

    Dim diff1 As System.TimeSpan
    diff1 = date2.Subtract(date1)
    et si tu vas voir sur MSDN TIMESPAN

    Citation Envoyé par msdn
    Un objet TimeSpan représente un intervalle de temps, ou une durée, mesuré en nombre positif ou négatif de jours, heures, minutes, secondes et fractions de seconde. La plus grande unité de temps utilisée pour mesurer la durée est un jour. Les intervalles de temps sont mesurés en jours pour des raisons de cohérence puisque le nombre de jours compris dans des unités de temps supérieures, telles que le mois et l'année, varie.

    La valeur d'un objet TimeSpan est le nombre de graduations équivalant à l'intervalle de temps représenté. Une graduation est égale à 100 nanosecondes, et la valeur d'un objet TimeSpan peut varier de MinValue à MaxValue.

    Une valeur TimeSpan peut être représentée en tant que [-]j.hh:mm:ss.ff, où le signe moins facultatif indique un intervalle de temps négatif, le composant j correspond aux jours, hh correspond aux heures (comme sur une montre de 24 heures), mm correspond aux minutes, ss aux secondes et ff aux fractions d'une seconde. En d'autres termes, un intervalle de temps représente un nombre positif ou négatif de jours sans heure, un nombre de jours avec une heure, ou uniquement une heure du jour. Par exemple, la représentation textuelle d'un objet TimeSpan initialisé avec 1.0e+13 graduations est « 11.13:46:40 », ce qui correspond à 11 jours, 13 heures, 46 minutes et 40 secondes.

    Le type TimeSpan implémente les interfaces System..::.IComparable et System..::.IComparable<(Of <(T>)>).
    On va donc dans les méthodes de TimeSpan sur msdn, en particulier .toString qui dit :
    Citation Envoyé par MSDN
    Notez que la méthode ToString n'inclut pas de surcharge qui comprend des spécificateurs de format et assure un contrôle précis sur la chaîne retournée. Pour définir le format précis de la chaîne retournée, vous pouvez mettre en forme les valeurs de propriété individuelles d'un objet TimeSpan, comme le montre l'exemple suivant. Pour plus d'informations, consultez la page Chaînes de format numériques.
    et voici un code d'exemple de mise en forme de cette même page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Module ToString
       Public Sub Main()
          Dim span As TimeSpan
     
          ' Initialize a time span to zero.
          span = TimeSpan.Zero
          Console.WriteLine(FormatTimeSpan(span, True))
     
          ' Initialize a time span to 14 days.
          span = New TimeSpan(-14, 0, 0, 0, 0)
          Console.WriteLine(FormatTimeSpan(span, True))
     
          ' Initialize a time span to 1:02:03.
          span = New TimeSpan(1, 2, 3)
          Console.WriteLine(FormatTimeSpan(span, False))
     
     
          ' Initialize a time span to 250 milliseconds.
          span = New TimeSpan(0, 0, 0, 0, 250)
          Console.WriteLine(FormatTimeSpan(span, True))
     
          ' Initalize a time span to 99 days, 23 hours, 59 minutes, and 59.9999999 seconds.
          span = New TimeSpan(99, 23, 59, 59, 999)
          Console.WriteLine(FormatTimeSpan(span, False))
     
          ' Initalize a timespan to 25 milliseconds.
          span = New TimeSpan(0, 0, 0, 0, 25)
          Console.WriteLine(FormatTimeSpan(span, False))
       End Sub
     
       Private Function FormatTimeSpan(span As TimeSpan, showSign As Boolean) As String
          Dim sign As String = String.Empty
          If showSign And (span > TimeSpan.Zero) Then sign = "+"  
     
          Return sign & span.Days.ToString("00") & "." & _
                 span.Hours.ToString("00") & ":" & _
                 span.Minutes.ToString("00") & ":" & _
                 span.Seconds.ToString("00") & "." & _
                 span.Milliseconds.ToString("000")
       End Function
    End Module
    ' The example displays the following output:
    '       00.00:00:00.000
    '       -14.00:00:00.000
    '       00.01:02:03.000
    '       +00.00:00:00.250
    '       99.23:59:59.999
    '       00.00:00:00.025
    l'erreur suivante était donc bien explicite :
    Citation Envoyé par GarsDuCalvados Voir le message
    Erreur 2 La résolution de surcharge a échoué, car aucun 'ToString' accessible n'accepte ce nombre d'arguments. C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2005\Projects\TDB\TDB\TEST.vb 54 25 TDB
    Pas de surcharge possible avec ce nombre et type de paramètre.

    le cours de Ph. Lasserre est absolument magnifique que j'admire énormément... ... mais il ne remplace pas l'aide MSDN, référence dans notre domaine

Discussions similaires

  1. [XL-2013] Afficher une ligne par jour à partir d'intervalles de temps
    Par mathilde.g dans le forum Excel
    Réponses: 3
    Dernier message: 27/12/2013, 01h03
  2. Réponses: 1
    Dernier message: 04/04/2013, 10h37
  3. [debutant] Récupérer un intervalle de temps
    Par xlurp dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 28/10/2004, 15h48
  4. [Interbase 6]Stocker l'intervalle de temps
    Par Andry dans le forum InterBase
    Réponses: 4
    Dernier message: 11/08/2004, 07h48
  5. [Timer]Comment mesurer un intervalle de temps ?
    Par Pill_S dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/05/2004, 17h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo