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 :

Calculer nombre d'heures selon des plages horaires


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
    Octobre 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 85
    Par défaut Calculer nombre d'heures selon des plages horaires
    Bonjour,

    Je suis actuellement à la recherche d'un solution pour obtenir le nombre d'heure (double) compris entre deux plages horaires à partir de deux date time différent (Start, End).

    Par exemple, je dispose de deux composants DateTime, par exemple : StartDateTime = "01/01/2016 02:00:00" et EndDateTime = "01/01/2016 10:00:00"

    Et je souhaiterais obtenir le nombre d'heures qu'il y a entre 23h et 5h00, entre 5h00 et 6h00..

    Quelle est la meilleurs solution selon vous ?

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Par défaut
    Bonjour, tu peux effectuer des opérations sur les DateTime

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Dim T1 = DateTime.Now
            Dim T2 = DateTime.Now.AddHours(-2).AddDays(-1)
     
            Console.WriteLine((T1 - T2).ToString)
    tu auras un résultat de type TimeSpan -> temps écoulé. Tu auras ainsi accès à plusieurs propriétés intéressantes telles que le nombre de jours, heure, etc...

  3. #3
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    Bonjour , en effet comme le dit ZenZitone , travailler sur le timespan est une bonne idée .
    J'ai une question , tu souhaite seulement retourner l'intervalle en heure brute ou en format heures/minutes/secondes?

    Un bon procédé serai de faire une méthode acceptant en paramètre deux DateTime (début et fin ) y calculer le timeSpan à partir des deux dates par exemple de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TimeSpan ts = new TimeSpan(EndDate.Ticks - StartDate.Ticks
    Ensuite tu regardes les propriétés qu'offrent le TimeSpan et tu devrai t'en sortir

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    En fait soustraire 2 DateTime donne un TimeSpan.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DateTime start = DateTime.Now.AddHours(-6);
    DateTime end = DateTime.Now;
    TimeSpan difference = end - start;

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 85
    Par défaut
    Je ne veux pas calculer la différence entre deux TimeSpan, je veux savoir le nombre d'heures compris dans une plage horaire..

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Il y a 3 semaines, tu as eu toutes les réponses nécessaires pour faire ce que tu veux et tu n'as toujours pas réussi ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 85
    Par défaut
    J'étais passé à autres choses depuis. J'ai une méthode qui pour moi est une grosse usine à gaz donc je demandais juste si quelqu'un avais une autre façon de penser que moi.

  8. #8
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par amalliap Voir le message
    Je ne veux pas calculer la différence entre deux TimeSpan, je veux savoir le nombre d'heures compris dans une plage horaire..
    Tu as mal lu la réponse qui t'a été faite. Il ne s'agit pas de faire une différence entre deux TimeSpan, mais de faire une différence entre deux DateTime. Et faire une différence entre deux DateTime te retourne un TimeSpan. Une fois que tu as ton TimeSpan, tu peux accéder au nombre d'heures constituant la plage via la propriété TotalHours.

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 85
    Par défaut
    Excusez moi si je me suis mal exprimé mais c'est assez complexe à expliquer ;-)

    Je vais prendre un cas concret :

    Je veux sortir un formulaire qui va lister le nombres d'heures d'intervention d'une personne dans un mois.

    Par exemple : Monsieur XXXX a effectuer 1 intervention de 3H. (On va dire de 19H à 22H).

    Seulement lorsque mon formulaire va être envoyé à la paye, il y a plusieurs plages horaires qui ne sont pas rémunéré pareil (21H-23H ; 23H-00H ; 00H-05H et 05H-06H)

    Donc il faut que je dise dans mon formulaire que Monsieur X a effectué 1 intervention de 3H avec 1H comprise dans la plage horaire de 21H-23H.

    Je recherche donc une fonction afin de calculer cela.

    Voici mon usine à gaz ^^

    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
     
    public double GetHour(int idUser,string date,string startDate, string endDate)
            {
                double totalHour = 0;
     
     
                string month = "";
                switch (date.Substring(5, 2))
                {
                    case "01": month = "1"; break;
                    case "02": month = "2"; break;
                    case "03": month = "3"; break;
                    case "04": month = "4"; break;
                    case "05": month = "5"; break;
                    case "06": month = "6"; break;
                    case "07": month = "7"; break;
                    case "08": month = "8"; break;
                    case "09": month = "9"; break;
                    case "10": month = "10"; break;
                    case "11": month = "11"; break;
                    case "12": month = "12"; break;
     
                }
                foreach (var intervention in InterventionCollection.GetAll(idUser))
                {
                    if (intervention.StartDate.Year.ToString() == date.Substring(0, 4) && intervention.StartDate.Month.ToString() == month)
                    {
                        if (intervention.StartDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+ startDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours == 0 && intervention.EndDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+endDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours == 0 && intervention.StartDate.ToString("dddd", provider).ToUpper() != "DIMANCHE")
                        {
                            totalHour = totalHour + intervention.EndDate.Subtract(intervention.StartDate).TotalHours;
                        }
     
                        if (intervention.StartDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+startDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours < 0 && intervention.EndDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+endDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours > 0 && intervention.StartDate.ToString("dddd", provider).ToUpper() != "DIMANCHE")
                        {
                            DateTime dateTime = DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+startDate, "yyyy-MM-dd H:mm:ss", provider);
                            DateTime dateTime2 = DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+endDate, "yyyy-MM-dd H:mm:ss", provider);
                            totalHour = totalHour + dateTime2.Subtract(dateTime).TotalHours;
                        }
     
                        if (intervention.StartDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+startDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours > 0 && intervention.EndDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+endDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours < 0 && intervention.StartDate.ToString("dddd", provider).ToUpper() != "DIMANCHE")
                        {
                            totalHour = totalHour + intervention.EndDate.Subtract(intervention.StartDate).TotalHours;
                        }
     
                        if (intervention.StartDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+startDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours >= 0 && intervention.StartDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+endDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours < 0 && intervention.EndDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+endDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours > 0 && intervention.StartDate.ToString("dddd", provider).ToUpper() != "DIMANCHE")
                        {
                            DateTime dateTime2 = DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+endDate, "yyyy-MM-dd H:mm:ss", provider);
                            totalHour = totalHour + dateTime2.Subtract(intervention.StartDate).TotalHours;
                        }
     
                        if (intervention.StartDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+startDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours < 0 && intervention.EndDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+endDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours < 0 && intervention.EndDate.Subtract(DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+startDate, "yyyy-MM-dd H:mm:ss", provider)).TotalHours > 0 && intervention.StartDate.ToString("dddd", provider).ToUpper() != "DIMANCHE")
                        {
                            DateTime dateTime2 = DateTime.ParseExact(intervention.EndDate.Date.ToString("yyyy-MM-dd") + " "+startDate, "yyyy-MM-dd H:mm:ss", provider);
                            totalHour = totalHour + intervention.EndDate.Subtract(dateTime2).TotalHours;
                        }
                    }
                }
     
                return totalHour;
            }
    On note que les arguments startDate et endDate de la fonction sont de type '23:00:00' par exemple

  10. #10
    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,

    le fait que tu n'aies pas la réponse voulue vient peut-être du fait que la question est difficile à comprendre. Ton énoncé :
    Citation Envoyé par amalliap Voir le message
    [..]Par exemple, je dispose de deux composants DateTime, par exemple : StartDateTime = "01/01/2016 02:00:00" et EndDateTime = "01/01/2016 10:00:00"

    Et je souhaiterais obtenir le nombre d'heures qu'il y a entre 23h et 5h00, entre 5h00 et 6h00..[..]
    Là, comme ça, je comprends pas. 23h-5h/5h-6h n'ont aucun rapport avec tes deux DateTimes.

    En fait ce que tu cherches à faire c'est trouver le nombre d'heures en commun (ou chevauchement) pour deux périodes ?
    En nous montrant le code de ton "usine à gaz" on comprendra peut-être mieux ton besoin

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

Discussions similaires

  1. [Exchange 2010] Acces selon des plages horaires
    Par SebRo dans le forum Exchange Server
    Réponses: 1
    Dernier message: 19/11/2015, 17h35
  2. [XL-2010] Calcul heures Excel avec plage horaire
    Par lafafmentvotre dans le forum Macros et VBA Excel
    Réponses: 43
    Dernier message: 09/12/2011, 09h22
  3. [XL-2003] calcul de délais selon une plage horaire hebdo
    Par DBO dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/07/2011, 18h38
  4. convertir des heures selon les fuseaux horaires
    Par cyrano_de_bergerac dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/05/2008, 12h13
  5. calcul délais entre deux dates avec plages horaires
    Par leila eco dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 03/01/2007, 17h51

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