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 entre dates au format "Year Month Day"


Sujet :

C#

  1. #1
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut Différence entre dates au format "Year Month Day"
    Hello,

    je dois poser une question qui est certainement déja apparue, mais je suis pas tombé explicitement dessus.

    En gros, j'ai deux dates, j'aimerais connaitre le temps qui les sépare, jusque la, rien de bien compliqué, je les soustrais et j'obtiens un TimeSpan en nombre de jours.

    Juste pour avoir un approximatif, j'ai obtenu les nombre d'années en divsant par 365, le nombre de mois par 30 et le nombre de jour le reste, mais j'ai besoin de quelque chose de plus précis.

    Les seuls éléments que j'ai trouvé sur sont que l'unité maximum de timespan est le jours parce que en mois ou en année ça dépend de certains facteurs et c'est plus compliqué...

    D'ou ma question, est-ce qu'une solution existe ou alors l'équipe .NET a un peu fait sa fainéante là-dessus?

  2. #2
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Salut,

    A partir de ton nombre de jours dans TimeSpan, quelle date veux-tu utiliser pour y ajouter le nombre de jours? Aujourd'hui, 01.01.0001, ... ? Cela a de l'importance pour le nombre de jours de chaque mois, année bissextiles, ...

    Regarde ceci, ca peut t'aider :

    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
     
      class Program
      {
        static void Main(string[] args)
        {
          TimeSpan t = new TimeSpan(400, 25, 35, 35, 3);
          DateTime now = DateTime.Now;
          DateTime a = new DateTime();
     
          Console.WriteLine(now.ToString());
          Console.WriteLine(a.ToString());
          Console.WriteLine(now.Add(t).ToString());
          Console.WriteLine(a.Add(t).ToString());
     
          Console.ReadKey();
        }
      }
    Sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    08.05.2008 10:15:08
    01.01.0001 00:00:00
    13.06.2009 11:50:43
    06.02.0002 01:35:35

  3. #3
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    mon calcul serait du genre:

    2 ans - (now - hier)

    j'essaie de comprendre par ton exemple mais si par hasard tu passes par la et que tu as une solution...

    merci en tout cas

    [Edit]
    Voila ou j'en suis:
    Le calcul en dessus me retourne un TimeSpan. J'ajoute ce timespan a la date actuelle et je tombe sur ma "date limite" - ce que je n'avais pas encore avant ton ptit bout de code. Ce que j'aimerais pouvoir faire maintenant, c'est savoir le nombre d'années, de mois et de jours qui séparent la date d'aujourd'hui et cette date limite, je dois le faire à la main ou y'a t'il plus simple?

  4. #4
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    pour ceux que ca interesse, j'ai trouvé une solution ici:
    http://forums.microsoft.com/MSDN/Sho...58533&SiteID=1

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Peux-tu s'il te plait, donner la solution que tu as utilisé ?

    Parce qu'en suivant le lien, je n'ai pas vu la réponse à la question :s

    Merci

  6. #6
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Ce thread datant d'il y a pas mal de temps, je vais peut etre pas répondre pile poil c'qu'il te faut, excuse moi d'avance si ma réponse est à coté de la plaque.

    Le moyen ne pourrait-il pas etre de créer un nouveau DateTime avec comme argument le TimeSpan resultant de la différence entre les deux dates initiales?

    ex:
    DateTime a = ...;
    DateTime b = ...;

    TimeSpan diff = DateDiff(a,b);
    DateTime result = new DateTime(diff);

    Ce qui permettrait d'accéder aux membres year, month day, etc. de result?

    (vraiment c'est un essai pour répondre rapidement, si ca fonctionne pas, dis le et je regarderai demain)

    Bonne soirée!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Merci !

    J'ai essayé, mais ca ne marche pas. Voici le code exact:

    DateTime d_debut = ...;
    DateTime d_fin = ...;

    TimeSpan diffTS = d_fin.Substract (d_debut);
    Date_Time diffDT = new DateTime (diffTS.Ticks);


    Le soucis, c'est que par exemple si:
    a = 01/01/2008
    b = 31/12/2008
    alors
    diffDT = 01/01/0002

    ce qui n'est pas juste, je devrais avoir 01/12/0001


    Mais dans le forum qu'il y avait en lien, j'ai cru comprendre que si on utilise 'Ticks', ca peut provoquer ce genre d'erreurs.

  8. #8
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Es-tu sur que le resultat devrait etre 01/12/01 ?

    J'aurais dit quelque chose comme 31/12/01, et encore, j'en suis pas si sur, m'enfin.

    D'un autre coté, tout n'est pas faut en tout cas dans ce que fait .net:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            private DateTime d1;
            private DateTime d2;
            private TimeSpan ts;
     
            d1 = new DateTime(2008, 1, 1);
            d2 = new DateTime(2008, 12, 31);
     
            this.ts = d2.Subtract(d1);
            DateTime dtemp = d2.Subtract(ts);

    on retrouve bien la bonne date...
    reste plus qu'a comprendre pourquoi on a un jour en trop avec les ticks

    quelqu'un d'autre s'y connaitrait mieux que moi?

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par tomtom_57 Voir le message
    Le soucis, c'est que par exemple si:
    a = 01/01/2008
    b = 31/12/2008
    alors
    diffDT = 01/01/0002

    ce qui n'est pas juste, je devrais avoir 01/12/0001


    Mais dans le forum qu'il y avait en lien, j'ai cru comprendre que si on utilise 'Ticks', ca peut provoquer ce genre d'erreurs.
    * 2008 est bissextile.
    * a = 01/01/2008 00:00:00 = (année 2008) + 0 jours
    * b = 31/12/2008 00:00:00 = (année 2008) + 365 jours (attention, d'ailleurs, c'est le début du 31/12, pas la fin !)
    Donc b - a = 365 jours
    Et 01/01/01 00:00:00 + 365 jours = 01/01/02 00:00:00. parce que l'année 1 n'était pas bissextile.

    Les années étant de tailles variables, tu auras inévitablement des petits décalages dans ce style. C'est peut être pour ça que le framework ne convertit pas des durées en jours en durées en années : parce qu'il n'existe pas de méthode unique et fiable pour le faire

  10. #10
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    tiens j'étais pas tout faux

    Merci Guulh!

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    C'est pour ca justement que j'ai choisi 2008, c'est parce que c'est une année qui pose problème

    En java, pour calculer ca, il faut passer par une classe calendrier (qui ne peut pas faire d'erreur, car les calendriers sont affichés correctement en fonction des années bissextiles etc... donc le calcul est juste)

    En .Net, j'ai essayé, mais ca me fait exactement la meme erreur ... mais peut etre que je m'y prends mal.
    En meme temps, je fais toujours une différence de dates que je met dans un timespan, donc c'est logique que ca ne marche pas.
    Mais apparamment, le calendrier ne permet pas de calculer l'écart entre deux dates non plus...
    Mais bon, je me suis dit que ca aurai pu etre une piste sympa a explorer



    [Apparté]
    @guulh:
    Cette méthode existe en VB, je ne vois pas de raison pour qu'ils ne peuvent pas la faire en C#. Et de toute manière, pour une architecture logicielle correcte, il aurai fallu que TimeSpan aie cette fonctionnalité.
    [/Apparté]

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    petit up ?

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

Discussions similaires

  1. Différence entre Date et Date()
    Par Gabout dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/04/2007, 16h32
  2. Réponses: 8
    Dernier message: 07/03/2007, 08h34
  3. [Date] Comment déclarer une variable de la forme (year-month-day)?
    Par adil_vpb dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 06/03/2007, 13h51
  4. calcul différence entre dates
    Par igour dans le forum Access
    Réponses: 2
    Dernier message: 18/01/2007, 11h30
  5. différence entre date ?
    Par jessy212 dans le forum Oracle
    Réponses: 9
    Dernier message: 30/09/2006, 08h16

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