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

VB.NET Discussion :

[2.0] DateDiff et différence de jours


Sujet :

VB.NET

  1. #1
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut [2.0] DateDiff et différence de jours
    Salut,

    J'essaie de faire une simple comparaison de date en utilisant DateDiff :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    derniereExecution = CType(item("DATE_JOURNAL"), Date)
    If DateDiff(item("CODE_INTERVALLE").ToString, derniereExecution, Date.Now) < CType(item("VALEUR_INTERVALLE"), Long) Then
    Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("d", #3/17/2008 5:10:16 PM#, #3/18/2008 9:27:58 AM#)
    Et ce qui me retourne 0 ou lieu de 1.
    J'ai donc regardé du coté de MSDN le pourquoi du comment et il n'y a qu'un avertissement concernant la soustraction de semaines :
    Lorsque la partie d'heure de Date1 est supérieure à celle de Date2 et que Interval est défini avec la valeur DateInterval.WeekOfYear, la fonction DateDiff retourne une valeur qui est inférieure de un par rapport à la valeur correcte.
    Pouvez-vous me confirmer, ou m'infirmer, que le comportement est le même pour une différence de jours?

    Merci par avance.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Je ne réponds pas à ta question, mais je voulais simplement t'orienter vers la classe TimeSpan qui représente une différence de dates et qui possède des propriétés très intéressantes (du style Days, TotalDays)
    Tu peux obtenir un TimeSpan de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Dim date1 As Date
            Dim date2 As Date
            Dim delta As TimeSpan = date1 - date2

  3. #3
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Merci pour ta réponse.

    Mais à vue de nez ça me conviendrait pas, car je cherche à faire une comparaison de dates de façon dynamique. Je peux très bien comparer des mois, des semaines, des jours dans la semaine, etc. D'après ce que j'ai pu voir timespan prends le jour comme unité la plus grande.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Je crois qu'il n'y a en fait pas de problème. Il y a 0 jours entre #3/17/2008 5:10:16 PM# et #3/18/2008 9:27:58 AM#. Par contre, il y a 16 heures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim delta As Long = DateDiff("h", #3/17/2008 5:10:16 PM#, #3/18/2008 9:27:58 AM#)
    ' delta = 16.

  5. #5
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Disons qu'il y a une certaine cohérence, je le comprends bien. Mais le but de ma comparaison n'est pas de tester s'il y a bien 24 heures de différence mais si je suis bien passé d'un jour à l'autre.

    En attendant, je fais un test en plus avec datepart dans les cas où je compare des jours ou des semaines.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Si tu souhaites savoir si tu as changé de jour, compare la propriété Day de chaque date. DateDiff n'est pas la bonne méthode puisque qu'elle indique un intervalle exprimé en jour (si commutateur "d"), ce qui n'est pas la même chose.

  7. #7
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Je fais une comparaison de date pour des mois, semaines, jours, jours de la semaine, heures, etc. DateDiff est à mon sens ce qui répond le mieux à la problématique.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  8. #8
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Je suis assez d'accord avec BCmDev :
    si tu ne veux pas que l'heure provoque des jours incomplets, arrondis en faisant par exemple ToString("dd/MM/yyy"), puis fais ton datediff.

    si tu es intéressé par la différence d'heures, le comportement que tu attends de la différence ne serait pas juste : si tu gardes les heures, c'est normal qu'il considère qu'il n'y a pas un jour complet entre les deux...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  9. #9
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Je suis assez d'accord avec BCmDev :
    si tu ne veux pas que l'heure provoque des jours incomplets, arrondis en faisant par exemple ToString("dd/MM/yyy"), puis fais ton datediff.

    si tu es intéressé par la différence d'heures, le comportement que tu attends de la différence ne serait pas juste : si tu gardes les heures, c'est normal qu'il considère qu'il n'y a pas un jour complet entre les deux...
    Ce n'est pas la peine d'implémenter un truc aussi sale
    Il y a une propriété Date dans le DateTime, ça évitera ta rustine de ToString()

    franculo_caoulene, ce n'est pas parce que DateDiff semble faire tout ce que tu veux, que c'est la bonne solution. Dans le cas présent, cette fonction veut trop en faire, et tu vas te retrouver avec une usine à gaz. Essaie plutot de decomposer en différents cas avec une gestion propre de chaque cas.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  10. #10
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Je pense que je gèrerai plus précisément au cas par cas plus tard comme le dit SaumonAgile.
    Pour le moment je gère juste l'exception "d" ou "ww", dans ce cas là je teste l'heure et je compare ensuite les date en conséquence.

    Je ne peux pas utiliser la propriété Date ou toString("dd/MM/yy") car des tâches pourraient aussi s'exécuter à un intervalle d'heures. Ou du moins, pas encore, comme je l'ai dit je le ferai plus tard.

    Merci pour vos réponse, je considère le sujet comme résolu.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

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

Discussions similaires

  1. DATEDIFF avec uniquement les jours ouvrés
    Par Inconnu_du_69 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/03/2009, 15h32
  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