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

API standards et tierces Java Discussion :

[JodaTime] Création de date avec semaine et année


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 549
    Par défaut [JodaTime] Création de date avec semaine et année
    bonjour

    je désire créer une date a partir d'une semaine et d'une année.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                DateTime dt = new DateTime();
                dt.withWeekyear(29);
                dt.withYear(2011);
     
                 System.out.println("dt " +  dt.getWeekOfWeekyear() + " " + dt.getYear());
    avec ce code j'obtiens à l'affichage: 16 2012 soit les la semaine et l'année en cours

    comment faire pour obtenir 29 2011?

    une idée?

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Ouh là là le petit coquin qui n'a pas lut la doc !

    Dans la doc il est écrit que DateTime est un objet immuable.
    Immuable ça veut dire qu'on ne peut pas changer .. eh oui !

    donc : inutile d'essayer de lui modifier sa semaine ou son année.
    Ada Lovelace, David Hilbert, Alan Turing et John von Neumann n'ont pas voulu essayer ... c'est dire la difficulté !

    En revanche, dans sa grande bonté, le Dieu Joda a prévu une autre classe : MutableDateTime
    Ce qui nous donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                MutableDateTime dt = new MutableDateTime();
                dt.setWeekOfWeekyear(29);
                dt.setYear(2011);
     
                 System.out.println("dt " +  dt.getWeekOfWeekyear() + " " + dt.getYear());
    et tu obtiens bien :
    dt 29 2011
    Voilà, c'était la déconnade du samedi.

    Bon, allez @lequebecois79 c'est pas grave, moi aussi j'avais pas mal cherché pourquoi
    mon DateTime ne bougeais pas avant de trouver l'existence de l'autre classe !

    Et je ne vois pas bien pourquoi Joda a créé une classe immuable et l'autre non.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Et je ne vois pas bien pourquoi Joda a créé une classe immuable et l'autre non.
    Parce qu'une date, c'est une date, c'est pas mardi à un moment et lundi trois appels de méthodes plus tard. Une date ça sert à indexer des Map, ou à être gardé comme collection dans un Set.
    Et ces machins-là, ça doit être immutable.

    Mais n'avoir que des objets immutables, c'est emmerdant quand on a besoin de construire sur un calendrier dont on change tout le temps les données : créer soixante nouveaux objets DateTime à chaque fois qu'on veut en garder trois, c'est pas terrible terrible. Pour ce cas-là, ont été ajoutées les versions mutables. À utiliser pour construire les immutables.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Parce qu'une date, c'est une date, c'est pas mardi à un moment et lundi trois appels de méthodes plus tard
    moui, moui, moui ... certes, bien sûr.

    Je vais faire un parallèle avec les dates que j'utilise dans mes bases de données.
    Les dates de factures, d'écritures comptables, etc sont stockées dans des champs colonnes(*) de type "DateTime".
    Ces dates sont toutes modifiables avec l'instruction "UPDATE ..." donc pas de blocage du point de vue du SGBD.

    Mais je vais bien sûr ajouter le verrouillage qui va bien (Trigger, vérification dans l'application client, etc.)
    pour que mes dates de factures ne soient jamais modifiées une fois que le document a été validé.
    Le même outil de programmation (champ date) me sert donc indifféremment pour des dates modifiables ou non.

    Donc je continue de penser qu'il aurait été possible de faire avec une seule classe mutable.



    (*) il faut utiliser le mot colonnes sinon notre ami SqlPro va me faire les gros yeux
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Oui, une BDD est rarement en lecture seule pour absolument tout le monde. Pas seulement les dates, on peut aussi mettre à jour les entiers et les textes. Integer et String sont pourtant immutables.

    Une BDD est un stockage, pas un espace de programmation. Du moins en principe, et puis même quand on programme une BDD, les données volatiles et l'espace de stockage durable sont deux choses différentes qui n'ont aucun lien l'une avec l'autre.

    C'est comme je l'ai dit : une date doit être immutable, parce qu'une date on s'en sert pour indexer des Map ou les collectionner dans un Set. Or ce qu'on utilise pour ça doit être immutable. Puisque ça ne doit pas muter.

    Donc je continue de penser qu'il aurait été possible de faire avec une seule classe mutable.
    Bien sûr que ça aurait été possible, c'est d'ailleurs ce que fait Java de base : java.util.Date est mutable. (Bon, ça ne permet pourtant pas de construire une Date correctement. Pour ça il faut un Calendar. java.util.Date a plusieurs défauts de conception, dont celui-ci.)
    Il est possible de le faire, simplement il ne faut pas le faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Il est possible de le faire, simplement il ne faut pas le faire
    ça c'est une belle expression, élégante, qui exprime bien pourquoi il faut de la rigueur dans la conception.
    (exemple d'absence de rigueur pour moi : ne rien mettre rien dans les catchs des exceptions !)

    Bon, naturellement, je suis d'accord avec toi sur le but final de l'opération :
    une fois qu'on a placé une date dans une map ou une table de SBGD alors ça ne doit plus bouger.

    Mais comme j'ai l'habitude de décider moi-même de ce qui bouge ou pas ...
    Je suis probablement susceptible mais DateTime immuable pour moi c'était un peu
    comme si Joda me disait : "écoute petit, comme tu ne sais pas programmer, je vais te bloquer de ce côté là ..."

    Bon, @thelvin merci pour ton avis (rigoureux) sur lequel je vais méditer (à partir de lundi)
    maintenant il faut que je réfléchisse pour qui je vais voter demain

    bonne soirée à tous
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/12/2014, 17h15
  2. Réponses: 1
    Dernier message: 26/10/2009, 15h51
  3. [Toutes versions] VBA Trouver jour avec semaine et année
    Par vivi4561 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/09/2009, 16h47
  4. Retrouver date à partir des n° de jour, semaine et année
    Par infosorome dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/12/2005, 11h21
  5. Probleme de date avec changement d'année
    Par GrisburT dans le forum Oracle
    Réponses: 11
    Dernier message: 30/11/2004, 16h15

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