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

Collection et Stream Java Discussion :

Conversion d'un String en Date


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut Conversion d'un String en Date
    Bonjour à tous,

    j'aimerais transformer un paramètre que je récupère sous forme String dans la méthode doGet() en Date(yyyy-mm-dd) afin de le passer en paramètre de la méthode SupprimerDate() qui supprime la datte qu'on lui passe en paramètre.

    voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          String date = request.getParameter("dateSuppri");
     
          SimpleDateFormat conversion = new SimpleDateFormat("yyyy-mm-dd");
    	  Date da = conversion.parse(date);//Eclipse me souligne cette ligne en rouge et me propose de caster ,
    quand je caste ça me dit de mettre à l'intérieur du bloc try et catch :

    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
     
          Map<Date,date> dates = (HashMap<Date,date>) session.getAttribute(Datecons);
    Date da;
    	try {
    		da = (Date) conversion.parse(date);
    if(date != null && dates != null){
          date dateS = new date();
    	  DateDao.SupprimerDate(dates.get(da));
    	  dateS.setDate(null);
    	  dates.remove(da);
          session.setAttribute(Datecons, dates);
    	} catch (ParseException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    Quand je tente de supprimer une date j'ai cette erreur dans le navigateur :


    Nom : Capture.PNG
Affichages : 2239
Taille : 42,0 Ko

    Merci d'avance!!!

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    La méthode parse() de SimpleDateFormat retourne du java.util.Date : si tu as besoin d'un java.sql.Date, il faut faire la conversion, comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.util.Date date = format.parse( ... );
    java.sql.Date sqlDate = new java.sql.Date(date.getTime());
    On ne peut pas caster du java.util.Date en java.sql.Date : la seconde est une spécialisation de la première.

    Dans l'autre sens, on peut directement utiliser l'instance de java.sql.Date (parce qu'elle étend java.util.Date) (on peut caster mais c'est inutile) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.sql.Date sqlDate = ...
    java.util.Date date = sqlDate;
    Par contre dans ce cas, on pourrait caster date en java.sql.Date, parce que c'est bien du java.sql.Date (le type de la variable n'est pas le type de l'instance référencée par la variable).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Bonjour,

    Je viens de tester votre code mais eclipse me signale une erreur au niveau de l'appel de la méthode parse via l'objet format.

    Voici comment j'ai fait :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          String date = request.getParameter(dateSuppri);
     
          java.sql.Date dat = format.parse(date);//Eclipse souligne le mot "format" en rouge
          java.sql.Date sqlDate = new java.sql.Date(dat.getTime());
    }
    Je veux la date au format et j'ai vu dans le code vous avez écrit je suppose que cela va me retourner le l'heure au format ou bien je me trompe?

    Merci d'avance!!!

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Regarde mieux ce que j'ai mis comme code. La méthode parse() retourne du java.util.Date. Et toi tu as besoin d'un java.sql.Date : on ne peut pas mettre directement une instance de java.util.Date dans une variable typée java.sql.Date. Ce sont 2 classes différentes et pour passer de java.util.Date à java.sql.Date, il faut créer une instance de java.sql.Date avec la valeur de l'instance de java.util.Date, ce qu'on obtient avec getTime() qui renvoit un long (appelé Epoch Time, le nombre de milliseconde de le 1/1/1970). Il n'y a pas de format attaché à une Date, ni à Date.getTime(). Le format c'est au moment d'afficher (ou de convertir depuis un String), et ça se fait par un DateFormat (SimpleDateFormat par exemple) - sauf Date.toString() qui utilise un format par défaut.

    PS : si format est souligné en rouge, c'est parce que tu n'as pas déclaré cette variable (je me suis dit que comme il était dans ton code, tu te douterais que cette partie ne changerait pas). Il faut évidemment faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Tu remarqueras que j'ai mis MM et pas mm : mm c'est les minutes (à priori c'est le mois et pas les minutes dans ta date à convertir). Voir http://docs.oracle.com/javase/8/docs...ateFormat.html
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Bonjour,

    Je viens de rectifier voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	private static final String formatDate = "yyyy-MM-dd";
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          String date = request.getParameter(dateSuppri);
     
          SimpleDateFormat format = new SimpleDateFormat(formatDate);
     
          java.util.Date dat = format.parse(date);/*cette fois ci eclipse me souligne en rouge du format jusqu'à le point virgule et me propose de lever l'exception c'est-à-dire mettre à l'intérieur de try et catch.*/
          java.sql.Date sqlDate = new java.sql.Date(dat.getTime());
    Ben,comme j'ai pas l'habitude de manipuler les dates il se peut que je me suis trompé dans mon code peut être au niveau du bean ou au niveau de la méthode SupprimerDate(date dateSup) :

    Code du bean :

    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
     
    package LesObjets;
     
    import java.sql.Date;
     
    public class date {
       private Date date;
     
    public Date getDate() {
    	return date;
    }
     
    public void setDate(Date date) {
    	this.date = date;
    }
     
    }
    code de la méthode public void SupprimerDate(date dateSup) :

    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
     
    	private static final String SupprimeDateCons = "call SuppressionDate(?)";
    @Override
    	public void SupprimerDate(date dateSup) throws DAOException {
           Connection connexion = null;
           PreparedStatement preparedStatement = null;
     
           try{
        	   connexion = daoFactory.getConnection();
        	   preparedStatement = connexion.prepareStatement(SupprimeDateCons);
        	   preparedStatement.setDate(1, dateSup.getDate());
        	   int sup = preparedStatement.executeUpdate();
        	   if(sup == 0){
        		   throw new DAOException("Aucune ligne supprimée.");
        	   }else{
        		   dateSup.setDate(null);
        	   }
           }catch(SQLException s){
    		   throw new DAOException("La suppression a échouée.");
           }finally{
        	   fermeturesSilencieuses(preparedStatement,connexion);
           }
     
    	}
    Voici le lien dans la jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><a href = "<c:url value = "/supprimerDate"><c:param name = "date" value = "${mapDate.key}"/></c:url>"><img src = "Image/sup.png" alt = "Supprimer" title = "Supprimer"/></a></td>
    Voici le code de la servlet de suppression :

    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
    61
    62
    63
    64
     
    package TPServlet;
     
    import java.io.IOException;
    import java.sql.Date;
    import java.text.SimpleDateFormat;
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
     
    import DAO.DAOFactory;
    import DAO.dateDao;
    import DAOException.DAOException;
    import LesObjets.date;
     
    /**
     * Servlet implementation class supprimerDate
     */
    @WebServlet("/supprimerDate")
    public class supprimerDate extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	private static final String confDaoFactory = "daoFactory";
    	private static final String dateSuppri = "date";
    	private static final String formatDate = "yyyy-MM-dd";
    	private static final String Datecons = "Dates";
    	private static final String listeDate = "/listeDate";
        private dateDao DateDao;   
     
    	public void init() throws ServletException {
           this.DateDao = ((DAOFactory) getServletContext().getAttribute(confDaoFactory)).getDateDao();
    	}
     
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          String date = request.getParameter(dateSuppri);
     
          SimpleDateFormat format = new SimpleDateFormat(formatDate);
     
          java.util.Date dat = format.parse(date);//"format.parse(date);" partie soulignée en rouge
          java.sql.Date sqlDate = new java.sql.Date(dat.getTime());
     
          HttpSession session = request.getSession();
          Map<Date,date> dates = (HashMap<Date,date>) session.getAttribute(Datecons);
     
          if(date != null && dates != null){
          try {
        	  date dateS = new date();
        	  DateDao.SupprimerDate(dates.get(sqlDate));
        	  dateS.setDate(null);
        	  dates.remove(date);
    	} catch (DAOException d) {
    		d.printStackTrace();
    	}
          session.setAttribute(Datecons, dates);
      }
          response.sendRedirect(request.getContextPath() + listeDate);
    	}
     
    }
    Voici les dates disponibles dans la table date et Date est le seul attribut de la table(donc identifiant) et a pour type date :

    Nom : Capture.PNG
Affichages : 1818
Taille : 15,8 Ko

    Donc j'aimerais pouvoir supprimer une date.

    Merci d'avance!!!

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Bonsoir,

    Juste pour vous dire que je viens de trouver la solution à mon problème.Au fait il faut :

    Initialiser à null java.util.Date dat = null;

    ensuite levé l'exception ParseException :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
    		dat = format.parse(date);
    	} catch (ParseException e) {
    		e.printStackTrace();
    	}
    et enfin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.Date sqlDate = new java.sql.Date(dat.getTime());

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

Discussions similaires

  1. [2008] Conversion d'un string en date dans une clause WHERE
    Par Florian54 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 30/05/2014, 16h04
  2. Conversion d'un string en date
    Par souhail72 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 07/11/2013, 11h08
  3. Conversion d'un string en date : 12/14 en 01/12/2014
    Par souhail72 dans le forum Développement de jobs
    Réponses: 16
    Dernier message: 30/10/2013, 08h12
  4. Conversion d'une String en Date
    Par NFHnv dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/02/2013, 16h41
  5. [Dates] Conversion d'un string en date
    Par ludo2612 dans le forum Langage
    Réponses: 9
    Dernier message: 04/02/2008, 21h15

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