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 :

Afficher la différence de jours entre deux dates en utilisant deux datpicker


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut Afficher la différence de jours entre deux dates en utilisant deux datpicker
    Bonsoir,

    J'essaie de faire une opération qui me permet d'afficher la différence de jours entre deux dates dans une textbox en utilisant deux datepicker.

    Voici mon code :
    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
     
        private void tbxNight_Loaded(object sender, RoutedEventArgs e)
            {
                tbxNight.Text = new TimeSpan(dpEndDate.SelectedDate.Value.Ticks - dpStartDate.SelectedDate.Value.Ticks).Days.ToString();
     
            }
     
     
       private void dpStartDate_ValueChanged(object sender, EventArgs e)
    	{
    		dpEndDate.SelectedDate = dpStartDate.SelectedDate.Value.AddDays(1);
    	}
     
      private void dpEndDate_ValueChanged(object sender, EventArgs e)
    	{
    	       /* Affiche un message d'erreur si la date ne correspond pas */
     
                if (dpEndDate.SelectedDate < dpStartDate.SelectedDate)
                {
                    MessageBox.Show("Veuillez selectionner une date correct");
                    dpEndDate.SelectedDate = dpStartDate.SelectedDate.Value.AddDays(1);
     
                }
     
                else
                    int Days = (dpEndDate.SelectedDate - dpStartDate.SelectedDate).TotalDays;
                    tbxNight.Text = Days.ToString();
                    return;
            }
    Malheureusement, j'ai 2 erreurs pas évidente, le 1er sur mon int de "int Days" : L'instruction incorporée ne peut pas être une déclaration ni une instruction étiquetée et le 2ième sur "TotalDays" : 'System.Nullable<System.TimeSpan>' ne contient pas une définition pour 'TotalDays' et aucune méthode d'extension 'TotalDays' acceptant un premier argument de type 'System.Nullable<System.TimeSpan>' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?)"

    Est ce possible?

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    ta première erreur vient du fait que tu oublies les accolades après ton else final.
    Du coup ce dernier ne prend que la ligne qui suit comme instruction, et il est interdit d'y déclarer une variable dans ce cas.
    Donc soit tu mets des accolades pour regrouper tes deux lignes, soit tu l'écris en une seule ligne sans déclaration.

    Pour ton deuxième problème c'est le souci semble venir du fait que le controle DatePicker de WPF expose des DateTime nullable.
    Ne connaissant que très peu le sujet j'ai pas de réponse là de suite.

    NB : tu devrais d'ailleurs indiquer qu'il s'agit de WPF dans ton titre.

    edit : pour ton deuxième problème il semble qu'on puisse faire un cast à la barbare
    (en vérifiant quand même qu'on a des valeurs valides), exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (dt1.SelectedDate != null && dt2.SelectedDate != null)
         MessageBox.Show(((DateTime)dt1.SelectedDate - (DateTime)dt2.SelectedDate).TotalDays.ToString() + " jours");
    else MessageBox.Show("select dates");

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    J'ai essayé ceci :
    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
     
            private void tbxNight_Loaded(object sender, RoutedEventArgs e)
            {
                tbxNight.Text = new TimeSpan(dpEndDate.SelectedDate.Value.Ticks - dpStartDate.SelectedDate.Value.Ticks).Days.ToString();
     
            }
     
            #endregion
            private void dpStartDate_ValueChanged(object sender, EventArgs e)
    		{
    			dpEndDate.SelectedDate = dpStartDate.SelectedDate.Value.AddDays(1);
    		}
     
    		private void dpEndDate_ValueChanged(object sender, EventArgs e)
    		{
    			/* Affiche un message d'erreur si la date ne correspond pas */
     
                if (dpEndDate.SelectedDate < dpStartDate.SelectedDate)
                {
                    MessageBox.Show("Veuillez selectionner une date correct");
                    dpEndDate.SelectedDate = dpStartDate.SelectedDate.Value.AddDays(1);
     
                }
     
                else {
                    int Days = (dpEndDate.SelectedDate - dpStartDate.SelectedDate).Days;
                    tbxNight.Text = Days.ToString();
                    return;
                }
            }
    Mais j'ai toujours cette erreur qui persiste malgré le fait de changer "TotalDays" par "Days" : 'System.Nullable<System.TimeSpan>' ne contient pas une définition pour 'Days' et aucune méthode d'extension 'Days' acceptant un premier argument de type 'System.Nullable<System.TimeSpan>' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?)"


    Est ce possible?

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Par défaut bonjour
    J'ai remplacé les messages par du texte en rouge lorsque la date est inferieur
    c'est du wpf d'où l'évènement SelectedDate à la place de ValueChanged
    mais cela devrait fonctionner de la même manière.


    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
     
          private void dpStart_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
            {
                CalculInterval();
            }
            private void CalculInterval()
            {
                if (this.dpEnd.SelectedDate != null && dpStart.SelectedDate != null)
                {
                    TimeSpan interval = (this.dpEnd.SelectedDate.Value.Subtract(dpStart.SelectedDate.Value));
                    this.txtDay.Text = interval.Days.ToString();
                    if (interval.Days <= 0)
                    {
                        txtDay.Foreground = Brushes.Red;
                    }
                }
                else
                {
                    this.txtDay.Text = string.Empty;
                    txtDay.Foreground = Brushes.Black;
                }
            }
            private void dpEnd_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
            {
                CalculInterval();
            }

  5. #5
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Citation Envoyé par Taylor08 Voir le message
    Mais j'ai toujours cette erreur [..] Est ce possible?
    Oui, regarde le code que j'ai mis en edit de mon précédent post, tu y trouveras la solution.
    Il ne s'agit pas d'utiliser Days plutôt que TotalDays mais de caster en DateTime tes valeurs pour qu'elles ne soient plus considérées comme nullable. Par contre il faut vérifier auparavant que lesdites valeurs ne sont pas nulles.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    J'ai quand même utiliser Days que TotalDays. Voici mon code :

    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
     
            private void dpStartDate_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
            {
                dpEndDate.SelectedDate = dpStartDate.SelectedDate.Value.AddDays(1);
            }
     
            private void dpEndDate_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
            {
                /* Affiche un message d'erreur si la date ne correspond pas */
     
                if (dpEndDate.SelectedDate < dpStartDate.SelectedDate)
                {
                    MessageBox.Show("Veuillez selectionner une date correct");
                    dpEndDate.SelectedDate = dpStartDate.SelectedDate.Value.AddDays(1);
     
                }
                else
                {
                    int Days = (dpEndDate.SelectedDate.Value - dpStartDate.SelectedDate.Value).Days;
                    tbxNight.Text = Days.ToString();
                    return;
                }
            }

    En fait l'erreur venait de mon mot clé "Value". Chose que je n'avais pas forcément mis dans mon ancien code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int Days = (dpEndDate.SelectedDate.Value - dpStartDate.SelectedDate.Value).Days;

  7. #7
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Il n'y a effectivement plus d'erreur de compile avec Value (ce qui m'étonne, je l'avoue, vu que ces accesseurs sont aussi nullable). Je te conseille quand même de tester la non nullité des valeurs avant de faire ton calcul, sinon ton prog va gentiment crasher le cas échéant.

    Bon dev

Discussions similaires

  1. [Date] Différence de jour entre deux dates
    Par ep31 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/07/2009, 10h06
  2. [SQL] obtenir la différence en jours entre deux dates sql
    Par toma03 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/06/2007, 12h20
  3. [VB.NET 2005 XE]calculer la différence en jours entre 2 dates ?
    Par kinganasius dans le forum Windows Forms
    Réponses: 1
    Dernier message: 04/04/2007, 15h00
  4. [Dates] Calculer différence en jours entre deux dates
    Par looping2b2a dans le forum Langage
    Réponses: 4
    Dernier message: 29/12/2006, 23h32
  5. Réponses: 6
    Dernier message: 06/12/2005, 16h51

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