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

C# Discussion :

[Compact .NET][Smartphone][DateTime] Précision en MilliSeconds ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut [Compact .NET][Smartphone][DateTime] Précision en MilliSeconds ?
    Bonjour,

    Je suis en train de développer une petite application Chrono que je vais porter vers une application pour Smartphone/PDA Phone.

    La manière la plus simple que j'ai trouvé de faire le chrono, est la suivante :

    1) Créer un objet DT1 (DateTime) qui est assigné à DateTime.Now
    2) Lancer le chrono.
    3) On entre dans une boucle TANT QUE.
    4) Créer un objet temporaire (DateTime) qui est assigné à DateTime.Now
    5) TimeSpan = temporaire - DT1.
    6) On boucle TANT QUE pas fin.
    7) Fin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DateTime dt = new DateTime();
    dt = DateTime.Now;
     
    ...
     
    While(!fin)
    {
         DateTime dt2 = DateTime.Now;
         TimeSpan span = dt2 - dt;
         lTime.Text = span.ToString();
         ...
    }
    Différence de DATE.

    Le problème :
    C'est la précision ! Je n'ai qu'une précision à la seconde.

    J'aimerais avoir une précision de l'ordre du 10ieme ou du 100ieme de seconde. (MilliSecond ?)

    Comment arriver à obtenir une précision pareille avec différence de date ?

    Ou y aurait-il un autre moyen de créer un chrono autrement qu'avec une différence de dates ?

    Merci d'avance.

  2. #2
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    La précision est celle du Tick, ce qui représente 100 nanosecondes. Ton souci vient du formatage, en effet, TimeSpan.ToString() n'affiche pas ce que tu désires.

    A toi d'appliquer le bon formatage.

  3. #3
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    En mode "debug" lorsque je place un breakpoint sur cette ligne et que j'examine la valeur du TimeSpan, je vois ceci dans ses propriétés :

    TotalSeconds = 7.0
    TotalMilliseconds = 7000.0
    Ticks = 70000000

    Admettons que j'affiche avec un formattage correct, j'aurai toujours 0 millisecondes ...

    Comment faire alors pour jouer avec les ticks et différence de date ?

  4. #4
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Tu dois avoir la baraka pour arriver à t'arrêter tout pile sur un chiffre rond sur les Ticks... Il nous manque le code que tu représente par les ... pour en dire plus.

  5. #5
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Je viens de faire un truc tout con et je n'ai pas ton problème...

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    namespace WindowsApplication1
    {
        partial class Form1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
     
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
     
            #region Windows Form Designer generated code
     
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                this.timer1 = new System.Windows.Forms.Timer(this.components);
                this.button1 = new System.Windows.Forms.Button();
                this.button2 = new System.Windows.Forms.Button();
                this.label1 = new System.Windows.Forms.Label();
                this.SuspendLayout();
                // 
                // timer1
                // 
                this.timer1.Interval = 10;
                this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
                // 
                // button1
                // 
                this.button1.Location = new System.Drawing.Point(100, 12);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(75, 23);
                this.button1.TabIndex = 0;
                this.button1.Text = "button1";
                this.button1.UseVisualStyleBackColor = true;
                this.button1.Click += new System.EventHandler(this.button1_Click);
                // 
                // button2
                // 
                this.button2.Location = new System.Drawing.Point(110, 41);
                this.button2.Name = "button2";
                this.button2.Size = new System.Drawing.Size(75, 23);
                this.button2.TabIndex = 1;
                this.button2.Text = "button2";
                this.button2.UseVisualStyleBackColor = true;
                this.button2.Click += new System.EventHandler(this.button2_Click);
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(126, 67);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(35, 13);
                this.label1.TabIndex = 2;
                this.label1.Text = "label1";
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(292, 268);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.button2);
                this.Controls.Add(this.button1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.ResumeLayout(false);
                this.PerformLayout();
     
            }
     
            #endregion
     
            private System.Windows.Forms.Timer timer1;
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.Button button2;
            private System.Windows.Forms.Label label1;
        }
    }
    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            private DateTime m_start;
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
                TimeSpan ts = DateTime.Now - m_start;
                label1.Text = ts.ToString();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                m_start = DateTime.Now;
                timer1.Start();
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                timer1.Stop();
            }
        }
    }

  6. #6
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Citation Envoyé par neptune Voir le message
    Je viens de faire un truc tout con et je n'ai pas ton problème...
    Bizzarre, je procède de la même façon que toi ....

    Je vais essayer avec ton code.

  7. #7
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    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
     
     
    // Action sur le bouton "Start" : 
    DateTime dt = new DateTime();
    dt = DateTime.Now;
    running = true;
    StartTime();
     
    // Action sur le bouton "Stop" : 
    running = false;
    StopTime();
     
    private void StopTime()
    {
         timerTime.Enabled = false;
    }
     
    private void StartTime()
    {
         timerTime.Enabled = true;
         While(timerTime.Enabled)
         {
              DateTime dt2 = DateTime.Now;
              TimeSpan span = dt2 - dt;
              lTime.Text = span.ToString();
     
              int cpt++; // compteur d'indice 
         }
    }
     
    private void timerTime_Tick(object sender, EventArgs e)
    {
        // Tick fixé à 150ms. 
        // rien !
    }

    Même en ne jouant pas avec le timer, j'obtiens les mêmes résultats ...

  8. #8
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Citation Envoyé par ExSter Voir le message
    Même en ne jouant pas avec le timer, j'obtiens les mêmes résultats ...
    Inspire toi du bout de code que j'ai posté...

  9. #9
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lTime.Text = span.ToString();
    Ton application est rafraichi à chaque fois que tu set le Text ?

  10. #10
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Citation Envoyé par User.Anonymous Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lTime.Text = span.ToString();
    Ton application est rafraichi à chaque fois que tu set le Text ?

    Non, mais même la valeur de span n'est pas celle que je voudrais. C'est une valeur ronde, sans décimale, un chiffre tout beau tout rond ...

Discussions similaires

  1. [ASP.NET / SQL] DateTime incompatible ?
    Par BK dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/04/2007, 14h17
  2. Précision à la milliseconde sous Linux
    Par le merou dans le forum Linux
    Réponses: 5
    Dernier message: 11/02/2007, 17h42
  3. [MySQL + VB .NET] Probleme DateTime Valide
    Par zitoun dans le forum Installation
    Réponses: 7
    Dernier message: 08/08/2006, 12h31
  4. [VB.NET] champ datetime dans un datagrid
    Par HULK dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/12/2005, 14h26
  5. [VB.NET]Besoin de précision pour architecture 3-tiers
    Par Dnx dans le forum Windows Forms
    Réponses: 8
    Dernier message: 14/09/2005, 09h09

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