none
conversion d'un nombre saisi RRS feed

  • Question

  • bonjour à tous.jai besoin de votre aide sur un problème.l'utilisateur fait entrer un nombre dans un textbox.ce nombre est en seconde.le programme doit  convertir si possible le nombre entré en année,en mois ,en semaine,en jour, en minute,en heure,en minute,en seconde.

    help me 

    samedi 3 septembre 2011 08:36

Réponses

  • Bonjour,

     

    As tu pensé à utiliser le constructeur suivant 

    Public Sub New ( _
    	ticks As Long _
    )

    Il construit un objet DateTime à partir d'un nombre de nanosecondes donnée (ticks).

    Pour ton cas il suffit de convertir le nombre de seconde saisi par l'utilisateur en nanosecondes et appeler ce constructeur

    Voir : http://msdn.microsoft.com/fr-fr/library/z2xf7zzk.aspx

    J'espère avoir bien compris ton problème.

     

    Cdt.

    mardi 6 septembre 2011 10:06
    Auteur de réponse

Toutes les réponses

  • Bonjour,

    Le principe serait de diviser successivement le nombre par le nombre de secondes dans une année, un mois, une semaine, un jour, une heure, une minute et de voir à chaque fois combien il reste de secondes soit qq chose comme (jusqu'au jour...) :

    Module Module1
        Sub Main()
            Const Minute As Integer = 60
            Const Heure As Integer = 60 * Minute
            Const Jour As Integer = 24 * Heure
            Const Mois As Integer = 365.25 / 12 * Jour
            Const Année As Integer = 12 * Mois
            Dim Secondes As Integer = 123456789
            Dim A As Integer = Secondes \ Année
            Secondes = Secondes - A * Année
            Dim m As Integer = Secondes \ Mois
            Secondes = Secondes - m * Mois
            Dim j As Integer = Secondes \ Jour
            Secondes = Secondes - j * Jour
            Console.WriteLine(String.Format("{0} années, {1} mois, {2} jours et des poussières...", A, m, j))
            Console.ReadKey()
        End Sub
    End Module
    
    


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    samedi 3 septembre 2011 09:20
    Modérateur
  • Bonjour,

    Voici le calcul vérifié, il est exact par contre à la place de 365.25 je te propose de mettre une variavle AnVar et de lui donner suivant l'année 365, 365.25 ou 366 ; idem pour le moi qui ne sera pas pareil mm (mois moyen), ce sera en fonction de l'année, soit :  mm = AnVar / 12, en dernier il faut évidemment tester et si 0 ne pas diviser.

    Le calcul est aussi contre-vérifié en faisant la reconstitution...

     

    ' exemple
    Option Explicit On
    Public Class Form1
      ' OBJET + TextBox1 : police = "couRier new 11" : multiline = TRUE
    
      Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Mettres en : année,en mois ,en semaine,en jour, en heure,en minute,en seconde.
        Dim s As String = vbCrLf
        Dim Nbase As String = 1000000000 ' 1 milliard de secondes
        ' donnée brutes
        ' dépend si moyen, non bissextile ou bissetile...
        Dim ans As Double = Nbase / (365.25 * 24 * 60 * 60)
        Dim mois As Double = (Nbase / 365.25) / 12
        Dim mm As Double = 365.25 / 12 ' mois moyen
        Dim semaine As Double = Nbase / 7
        Dim jour As Double = Nbase / 365.25
        Dim minute As Double = (Nbase / 365.25) * 24 * 60
        Dim a4 As Integer
        Dim m12 As Integer
        Dim s7 As Integer
        Dim j1 As Integer
        Dim h24 As Integer
        Dim m60 As Integer
        Dim reste As Double
        Dim recompose As Double
        '
        ' soustraction du nompbre de base
        A4 = 0
        If Nbase > 0 Then a4 = Nbase \ (365.25 * 24 * 60 * 60)
        If a4 > 0 Then reste = Nbase - a4 * (365.25 * 24 * 60 * 60)
        m12 = 0
        If reste <> 0 Then
          m12 = reste \ (60 * 60 * 24 * mm)
          If m12 > 0 Then reste = reste - m12 * (60 * 60 * 24 * mm)
        End If
        s7 = 0
        If reste <> 0 Then
          s7 = reste \ (60 * 60 * 24 * 7)
          If s7 > 0 Then reste = reste - s7 * (60 * 60 * 24 * 7)
        End If
        j1 = 0
        If reste <> 0 Then
          j1 = reste \ (60 * 60 * 24)
          If j1 > 0 Then reste = reste - s7 * (60 * 60 * 24)
        End If
        h24 = 0
        If reste <> 0 Then
          h24 = reste \ (60 * 60)
          If h24 > 0 Then reste = reste - h24 * (60 * 60)
        End If
        m60 = 0
        If reste <> 0 Then
          m60 = reste \ 60
          If m60 > 0 Then reste = reste - (m60 * 60)
        End If
        '
        ' recomposition de vérification : 31 an, 8 ms, 1 sem, 0 jr, 19h46'40
        recompose = 0
        recompose = recompose + (31 * 365.25) * 24 * 60 * 60 ' ans
        recompose = recompose + 8 * (365.25 / 12) * 24 * 60 * 60 ' mois
        recompose = recompose + 7 * 24 * 60 * 60 ' semaines
        recompose = recompose + 0 ' jours
        recompose = recompose + 19 * 60 * 60 ' heures
        recompose = recompose + 46 * 60 ' minutes
        recompose = recompose + reste ' seconde
        '
        textbox1.text = ""
        TextBox1.Text = TextBox1.Text & "Nbase    = " & Nbase & s
        TextBox1.Text = TextBox1.Text & "ans      = " & ans & s
        TextBox1.Text = TextBox1.Text & "mois     = " & mois & s
        TextBox1.Text = TextBox1.Text & "semaine  = " & semaine & s
        TextBox1.Text = TextBox1.Text & "jour     = " & jour & s
        TextBox1.Text = TextBox1.Text & "minute   = " & minute & s
        TextBox1.Text = TextBox1.Text & "seconde  = " & Nbase & s & s
        TextBox1.Text = TextBox1.Text & a4 & " an, " & m12 & " ms, " & s7 & " sem, "
        TextBox1.Text = TextBox1.Text & j1 & " jr, " & h24 & "h" & m60 & "'" & reste & s & s
        TextBox1.Text = TextBox1.Text & recompose
      End Sub
    
    End Class
    
    
    

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire

    • Modifié EhJoe mardi 6 septembre 2011 11:00 précision
    samedi 3 septembre 2011 10:59
  • Bonjour,

    Pour moins vous compliquez la chose vous avez aussi :)

    TimeSerial

    TimeSpan

    DateSerial

    Avec ses trois là c'est inutile d'entrer dans les formules de calcul car les calcul ce font automatiquement, ses class sont tres facile a utiliser

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    samedi 3 septembre 2011 12:12
    Auteur de réponse
  • Bonjour Xavier,

     

    J'aime bien le calcul, même en utilisant les fonctions VB, ça ne sera guère plus court, d'autre part il faudra indiquer à vb aussi qu'elle est la valeur de base et l'anne concernée, alors je ne sais pas si on gagne grand chose.

     

     

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    samedi 3 septembre 2011 12:26
  • Oui, j'ai failli suggérer TimeSpan mais l'année et le mois auraient dû être calculés séparemment (non pris en charge par TimeSpan une durée en années et mois étant par nature approximative), j'ai donc préféré montrer le principe général avec des années et mois moyens.

    Comme souvent, j'en profite pour suggèrer au demandeur d'expliquer éventuellement le contexte plus général dans lequel il se trouve. Cela me parait un peu bizarre de transformer une durée précise à la seconde en une durée en années/mois/etc toujours jusqu'à la seconde... qui est forcément approximative et dépendrait de son calage dans le temps.

    J'ai aussi envisagé que le but réel soit d'ajouter cette durée en secondes à une date donnée ce qui donne une autre date et permet de calculer une durée précise entre deux dates particulières même si apparemment la demande initiale ne parle pas de partir d'une date en particulier (et la durée résultante en année/mois etc... n'aurait aucun sens sans donner au moins l'une des deux dates).

    D'où l'intérêt de connaitre le contexte plus général.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".



    samedi 3 septembre 2011 12:50
    Modérateur
  • J'en doute fort pour faire ce qu'il y a affaire ...

    Par contre il y a une limitation qui est "Int32" donc il faudra juste faire une conversion et là c'est pas top mais bon ...


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    samedi 3 septembre 2011 13:00
    Auteur de réponse
  • Bonjour, LE_MUFTY,

    Est-ce que vous avez pu avancer en utilisant les informations fournies par Patrice, EhJoe et Xavier ? Merci de tenir la communauté informée sur la suite de vos démarches.

     

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 5 septembre 2011 06:20
  • Bonjour,

     

    As tu pensé à utiliser le constructeur suivant 

    Public Sub New ( _
    	ticks As Long _
    )

    Il construit un objet DateTime à partir d'un nombre de nanosecondes donnée (ticks).

    Pour ton cas il suffit de convertir le nombre de seconde saisi par l'utilisateur en nanosecondes et appeler ce constructeur

    Voir : http://msdn.microsoft.com/fr-fr/library/z2xf7zzk.aspx

    J'espère avoir bien compris ton problème.

     

    Cdt.

    mardi 6 septembre 2011 10:06
    Auteur de réponse