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 :

Numéro première semaine d'un mois


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 53
    Par défaut Numéro première semaine d'un mois
    Bonjour,

    Dans un de mes programme je voudrais savoir, si je suis dans la 1er semaine du moi en cour (semaine commençant a lundi).

    Utilité : Mon programme se lance chaque semaine, et me distribue des taches à faire, et à chaque début de moi il me donne des taches supplémentaire.

    J'ai une quelque idée:
    Récupérer le numéro de la semaine du 1er lundi du moi puis le comparer au numéro de la semaine en cours.

    Mais je ne sais pas comment faire. (pour récupérer le numéro de la semaine je sais faire sans problème, mais c'est pour le numéro de la semaine du 1er lundi que je bloque)

    Quelqu'un peut m'aider ?

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Bonjour,

    J'ai pas de super idée qui vient comme ça mais en bricolage ça pourrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public DateTime GetPremierLundiDuMois(int annee, int mois)
    {
        DateTime dateARetourner = new DateTime(annee, mois, 1);
     
        while(dateARetourner.DayOfWeek != DayOfWeek.Monday)
            dateARetourner = dateARetourner.AddDays(1);
     
        return dateARetourner;
    }
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 216
    Par défaut
    Perso
    Planificateur de taches
    Lancer le programme avec un paramètre supplémentaire le premier lundi du mois

  4. #4
    Membre averti
    Inscrit en
    Février 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 53
    Par défaut
    Se n'est pas des programmes à lancer donc pas de planificateur de taches.
    C'est plutôt une information à donner chaque début de moi en plus de celle qu'il y a toutes les semaines.

    Merci MaximePalmisano, t'as fonction est simple et elle fait l'affaire.

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Pour le fun, en une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DateTime FirstMondayOfMonth(int year, int month)
    {
    	return Enumerable.Range(1, 7).Select(i => new DateTime(year, month, i)).First (d => d.DayOfWeek==DayOfWeek.Monday);
    }

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 216
    Par défaut
    impressionnant ce que les gens arrivent a faire avec des expressions lambas

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Je suis assez d'accord, ça en jette d'avoir le truc en une ligne, mais je suis pas sur que ça soit super bénéfique.

    Déjà, c'est plus gourmand Linq (ok on s'en fout mais c'est sur le principe :p) mais sur le coup je pense pas qu'on gagne plus en lisibilité. Du coup, c'est le copain qui passe derrière qui risque de pas être content
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 216
    Par défaut
    Mais non, médisant, après 1h de lecture et de relecture et la perte de la moitié de mes cheveux , je crois avoir compris la ligne de code

    heuresement qu'il y a le nom de la fonction pour aider

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Pour le coup des perfs, j'suis pas sur que y'ait une grosse différence la dessus
    Pour la lisibilité, effectivement, on y perd tous ceux qui ne maitrisent pas les lambda. Cela dit, faire du dev C# de nos jours sans maitriser la lambda, c'est un peu aventureux!

  10. #10
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Initié ou pas au lambdas, je suis sur que la boucle fera toujours tilt en premier
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  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 MaximePalmisano Voir le message
    Initié ou pas au lambdas, je suis sur que la boucle fera toujours tilt en premier
    Bah, euh, non...
    Le code de Nathanael est juste la ré-écriture de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(int i = 1; i < 7; i++)
    {
     Date d = New DateTime(anne, mois, i);
      if (d.DayOfWeek == DayOfWeek.Monday)
        return d;
    }
    Hormis le code, à la charge du compilo C#, de transfo des IEnumerable en state machines, le seul surcoût qu'on a, c'est l'appel de plus de méthodes; mais les instructions sont strictement les mêmes.

    Et pour la lisibilité, faut juste s'y faire. Ca dit bien ce que ça fait, non ? Pour chaque nombre N entre 1 et 7, prendre la date N/MM/YY, et retourner le premier tel que son jour est lundi. C'est tout pareil.

  12. #12
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par MaximePalmisano Voir le message
    Initié ou pas au lambdas, je suis sur que la boucle fera toujours tilt en premier
    Ne pas oublier que dans LINQ y'a l'instruction yield qui permet de faire de l'execution élément par élément. Ainsi, à moins que le lundi ne soit le 7è jour, il n'y aura pas la création des 7 dates mais uniquement de celles jusqu'au lundi.

  13. #13
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Entre :

    Pour chaque nombre N entre 1 et 7, prendre la date N/MM/YY, et retourner le premier tel que son jour est lundi.
    Et :

    Tant que le jour n'est pas un lundi, on ajoute un jour.
    Je vois une évidente différence de lisibilité, après chacun son point de vue
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  14. #14
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par MaximePalmisano Voir le message
    Pour chaque nombre N entre 1 et 7, prendre la date N/MM/YY, et retourner le premier tel que son jour est lundi.
    Ca se formule également: prend le premier lundi des septs premiers jours du mois.

  15. #15
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Je sais bien, je donne juste mon avis

    Je trouve que les lambdas sont un outils et un atout formidable du .NET mais quand je relis du code, ça me saoule d'en avoir là où ça n'est pas "nécessaire".

    Je trouve que c'est super quand ça intervient sur une collection, un appel DB ou des trucs du genre mais quand c'est la pour remplacer un foreach je trouve ça juste que ce n'est pas vraiment à sa place.

    Après chacun sa façon de voir les choses et d'écrire du code, il y en a qui ne vont jurer que par les lambdas et en foutre à chaque ligne et d'autres qui vont trouver ça horrible et qui n'en mettront nulle part

    (Disons que j'suis entre les deux quoi )
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  16. #16
    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
    Linq n'est jamais "nécessaire", on a codé bien des choses avant qu'il apparaisse

    L'avantage, même s'il est nul sur un petit exemple comme celui ci, c'est que l'on exprimer ce que l'on veut obtenir, et pas le moyen par lequel on l'obtient. Comme en SQL (dont le Q est le même que celui de LINQ: Query), on dit pas comment on veut obtenir qq chose, on dit ce qu'on veut.

    Et du coup, il est plus facile pour la lib sous-jacente d'optimiser la requête; remplacer du Linq par PLinq peut être assez facile, alors que paralléliser du code standard peut ête casse-bonbon.

    Après, comme tout outil, il peut être abusé

  17. #17
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    J'ai mis des guillemets exprès sur "nécessaire" car je savais que j'allais me faire taper sur les doigts

    Quand je dis nécessaire, j'entends par là, qui donne un réel plus au code, que ce soit au niveau de la lisibilité, de la maintenabilité, etc
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Par défaut Une solution sans itération !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateTime Dt = DateTime.Today;
    MessageBox.Show(new DateTime(Dt.Year, Dt.Month, Convert.ToInt((8 - (new DateTime(Dt.Year, Dt.Month, 1).DayOfWeek)) + 1) % 7).ToString());
    Xavier.

  19. #19
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    En parlant de lisibilité ...
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  20. #20
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Le Convert.ToInt d'un ToString c'est peut être pas obligatoire! Autant pas faire de ToString non?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/11/2007, 23h28
  2. déterminer les numéros de semaines d'un mois
    Par yucf_miagiste dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/09/2007, 17h41
  3. Réponses: 3
    Dernier message: 20/06/2007, 17h12
  4. Numéro de semaine qui donne le mois
    Par Invité dans le forum Excel
    Réponses: 5
    Dernier message: 11/04/2007, 15h32
  5. Réponses: 6
    Dernier message: 01/03/2007, 14h57

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