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 :

Java & Oracle : passage de Date


Sujet :

API standards et tierces Java

  1. #1
    Invité
    Invité(e)
    Par défaut Java & Oracle : passage de Date
    Bonjour,

    Tout d'abord, je sais que ce genre de questions est assez récurent mais je n'ai pas trouvé de réponse satisfaisante à mon problème avec mon ami Google.

    Voila je parse deux string en 2 dates, jusqu'ici rien de bien méchant. Le but de ces dates est de faire parti d'une requête sql pour une base oracle faisant des tests pour savoir si un champ est dans l'intervalle de ces 2 dates.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    prepStat.setDate(INDEX_1, new java.sql.Date(beginDate.getTime().getTime()));
                prepStat.setDate(INDEX_2, new java.sql.Date(endDate.getTime().getTime()));
    Le problème est le suivant, je souhaiterais pouvoir dire à mon prepared statement qu'il doit mettre ces 2 dates sous un format spécifique (ici DD/MM/YY HH:MI:SS) et je veux initialiser une des dates à l'heure 0 et l'autre juste avant minuit.

    Auriez-vous des pistes à me conseiller?

    Merci beaucoup.

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Hello,

    d'autant que je sache, ce genre de détails est propre à l'implémentation du driver/de la base. A mon avis tu n'as aucun contrôle possible là-dessus. C'est le driver oracle qui choisit comment il stocke un java.util.Date dans ses tables.

    Pour spécifier l'heure/minute/seconde, il faut agir sur l'object java.util.Date qui est utilisé, avec Calendar:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Date mydate = ...;
     
    Calendar cal = Calendar.getInstance();
    cal.setTime(mydate);
    cal.set(Calendar.HOUR, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    Date newDate = cal.getTime();
     
    // TODO : insérer newDate dans la table oracle
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    L'objet java.sql.Date représente l'objet SQL DATE qui représente une simple date sans heure/minute/seconde.

    Pour avoir la notion date+heure il faut se tourner vers l'objet Timestamp...

    a++

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci pour ces réponses.

    Je vais essayer avec l'objet TimeStamp.
    Ce que je ne comprends pas , c'est que mes champs sont bien de type sql DATE dans ma base de données, mais si je regarde mes données (avec sqlDeveloper) j'ai bien les heures, minutes, secondes qui sont affichés.
    Cela vient-il du fait que toutes mes insertions de date sont fait avec la commande Oracle SYSDATE?

    Donc si je lui envoi via JDBC des objets TimeStamp, pourra-t'il les comparer aux objets Date de ma BD (qui ont bien des heures, minutes, secondes)?
    Merci

    Je vous tiens au courant de mes avancés.

  5. #5
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Salut,

    Cela vient-il du fait que toutes mes insertions de date sont fait avec la commande Oracle SYSDATE?
    Oui

    Donc si je lui envoi via JDBC des objets TimeStamp, pourra-t'il les comparer aux objets Date de ma BD (qui ont bien des heures, minutes, secondes)?
    Oui

    C'est l'objet java.sql.Date qui est à moitié naze... La javadoc est cela dit assez parlante:
    To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be 'normalized' by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Dans la norme SQL le type DATE contient uniquement une date, le type TIME contient uniquement une heure, et le type TIMESTAMP contient les deux.

    Les objets Date, Time et Timestamp de java.sql représentent ces différentes types de temps.


    Maintenant au niveau de la BD cela peut varier car ils peuvent implémenter leurs propres versions et leurs propres types. La conversion étant effectué lors des accès aux données.

    Mais quoi qu'il en soit, il faut utiliser le bon type selon ce que l'on veut obtenir et selon ce que l'on a en base...

    a++

  7. #7
    Invité
    Invité(e)
    Par défaut
    J'ai changé mes types Date sql que j'envoyais en TimeStamp et cela marche parfaitement.

    Merci pour ces réponses qui m'ont bien aidé.

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

Discussions similaires

  1. Oracle reporte la date de sortie de Java EE 8 à 2017
    Par Olivier Famien dans le forum Java EE
    Réponses: 5
    Dernier message: 02/07/2015, 20h14
  2. Problème de format de date entre Java et Oracle
    Par NFHnv dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 16/07/2013, 14h56
  3. [oracle 9i ] verification date
    Par jejam dans le forum Oracle
    Réponses: 2
    Dernier message: 20/10/2005, 11h44
  4. [ORACLE]20 dernières dates de facturation
    Par Frank dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/10/2005, 10h06
  5. Equivalent à TRUNC ou ROUND d'Oracle sur les Dates ?
    Par swirtel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/05/2005, 09h45

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