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 :

Différence de dates en mois


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Différence de dates en mois
    Bonjour

    Ca ne m'étais pas encore apparu, mais je constate avec stupeur que rien n'a été prevu pour gerer correctement les différences de dates en .NET
    Par exemple ni DateTime ni TimeSpan ne permettent facilement de calculer la différence en mois entre deux dates.
    Et comme en plus DateTime est sealed on est obligé de bricoler
    Ai-je loupé qq chose ?

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    en vb.net on a datediff(month,...) qui retourne un int64 dans l'assembly microsoft.visualbasic

    m'enfin un mois n'a pas une taille fixe déjà ... donc ca peut être subjectif comme calcul

    dans le pire ca se code facilement et tu peux faire un system.runtime.compilerservices.extension sur date et/ou timespan
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Comme le dit Pol63, le problème d'une différence en mois c'est que les mois n'ont pas tous le même nombre de jours, alors à mois d'itérer chaque mois en prenant en compte les années bissextiles, tu n'aura rien de très précis.
    Et puis il reste la différence de jours (2 mois et 15 jours donnent 2 mois ? 3 mois ? 2.5 mois ? ...)

    Donc, compte tenus que de toute façon tu n'aura qu'une approximation, si l'écart entre tes deux dates n'est pas trop violent, tu peux faire ceci :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DateTime dt1 = DateTime.Now.AddYears(-1);
    DateTime dt2 = DateTime.Now;
    TimeSpan ts = dt2 - dt1;
    Console.WriteLine(ts.TotalDays / 30); // = 12.16666647219

    Ça n'est pas suffisamment précis ?

  4. #4
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Meci Pol

    Oui mais je trouve absurde de devoir faire reference a des librairies VB en cSharp

    Et quelque soit le nombre de jours, une année contient toujours 12 mois
    Maintenant je conçoit que l'on peut débattre de la notion de mois en tant que nombre de jours ou de mois transités
    Entre janvier et février on peut considerer que nous avons franchi un mois meme si l'on parle du 31 janvier et du 1er février

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    la librairie vb est codée en .net donc ca ne pose pas particulièrement de soucis

    et puis tu peux surtout regarder via reflector le code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Pour ctxNop et Pol

    Je reprends mon explication sur le concept d'indice mensuel

    On peut considerer en base 1 que Janvier a l'indice 1 et février a un indice 2
    Donc la différence d'indice entre les MOIS de fevrier et janvier dans une année est de 1
    Donc dans un calcul en base mensuelle on ne s'occupera pas des eventuels jours ou heures sous jacentes, de meme que dans un calcul ent base entiere on ne se préoccupe pas des fractions qui peuvent séparer deux entier

  7. #7
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Donc entre le 31/01/2011 et le 01/02/2011 il y a 1 mois de différence ?

    Dans ce cas :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DateTime dt1 = new DateTime(2009, 07, 21);
    DateTime dt2 = DateTime.Now;
     
    int MonthDiff = (dt2.Year - dt1.Year) * 12 + (dt2.Month - dt1.Month);

    Non ?

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Ben oui

    Merci pour le bout de code ctxnop. D'ailleurs je fais déja exactement la meme chose

    Je trouve cependant absurde que DateTime ou TimeSpan n'aient pas déja ces méthodes ou propriétés !

  9. #9
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Citation Envoyé par olibara Voir le message
    Et comme en plus DateTime est sealed on est obligé de bricoler
    On peut utiliser une méthode d'extension, non?

  10. #10
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    Citation Envoyé par chrisdot Voir le message
    On peut utiliser une méthode d'extension, non?

    tout à fait
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par olibara Voir le message
    Ben oui

    Merci pour le bout de code ctxnop. D'ailleurs je fais déja exactement la meme chose

    Je trouve cependant absurde que DateTime ou TimeSpan n'aient pas déja ces méthodes ou propriétés !
    Ces calculs sont dépendants du type de calendrier, et datetime ne se limite pas au nôtre.

    De plus, dateTime n'est pas sealed; c'est une struct, donc non héritable de toutes façons.

    Perso, l'absence de ce genre de méthode dans DateTime me va bien, vu le flou qui les entoure. Si le besoin ici est de faire un delta au niveau mois en ignorant les les niveaux inférieurs, la solution de ctxnop convient parfaitement, mais le besoin est trop spécifique pour mériter d'être dans le framework.

  12. #12
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci Guuhl

    De plus, dateTime n'est pas sealed; c'est une struct,
    Tiens oui ! j'avais pas fais attention
    Bon ben on va vivre avec ca

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [10g] Calculer la différence entre deux dates par mois
    Par sirty dans le forum PL/SQL
    Réponses: 4
    Dernier message: 14/04/2015, 11h51
  2. Différence en nombre de mois entre deux dates
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/05/2007, 12h26
  3. [Dates] Jour Mois anné, heure minute et seconde...
    Par SangKou dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2005, 08h34
  4. [langage]Date - 6 mois
    Par lechevin dans le forum Langage
    Réponses: 5
    Dernier message: 30/06/2005, 14h31

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