web-dev-qa-db-fra.com

Date d'analyse de chaîne au format (aaaa-MM-jj)

J'ai une chaîne sous la forme "2013-09-18". Je veux le convertir en Java.util.Date . Je le fais

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date convertedCurrentDate = sdf.parse(currentDateText);

LeCurrentDate converti arrive comme 'Wed Sep 18 00:00:00 IST 2013'

Je veux ma sortie sous la forme '2013-09-18'

Les heures, les minutes et les secondes ne devraient pas venir et devraient se présenter sous la forme aaaa-MM-jj.

11
user2791546

Vous devrez peut-être format la sortie comme suit.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date convertedCurrentDate = sdf.parse("2013-09-18");
String date=sdf.format(convertedCurrentDate );
System.out.println(date);

Utilisation 

String convertedCurrentDate =sdf.format(sdf.parse("2013-09-18"));

Sortie:

2013-09-18
28

tl; dr

LocalDate.parse( "2013-09-18" )

… et …

myLocalDate.toString()  // Example: 2013-09-18

Java.time

La question et les autres réponses sont obsolètes. Les anciennes classes de date-heure problématiques sont désormais remplacées par les classes Java.time.

ISO 8601

Votre chaîne d’entrée est conforme au format standard ISO 8601 , AAAA-MM-JJ. Les classes Java.time utilisent par défaut les formats ISO 8601 lors de l'analyse et de la génération de représentations sous forme de chaînes de valeurs date-heure. Donc, pas besoin de spécifier un modèle de formatage.

LocalDate

La classe LocalDate représente une valeur de date uniquement sans heure et sans fuseau horaire.

LocalDate ld = LocalDate.parse( "2013-09-18" );

À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes héritées _ date-heure telles que Java.util.Date , Calendar _, & SimpleDateFormat .

Le projet Joda-Time , désormais en mode { mode maintenance }, conseille la migration vers les classes Java.time .

Pour en savoir plus, consultez le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou une version ultérieure. Pas besoin de chaînes, pas besoin de Java.sql.* classes.

Où obtenir les classes Java.time? 

Le projet ThreeTen-Extra étend Java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels ajouts à Java.time. Vous pouvez y trouver des classes utiles telles que Interval _, YearWeek , YearQuarter _ et plus _.

9
Basil Bourque

Vous créez un objet Date, qui représente un certain point de la chronologie. Cela signifie qu'il aura toutes les parties nécessaires pour le représenter correctement, y compris les minutes et les secondes, etc. Comme vous l'initialisez à partir d'une chaîne ne contenant qu'une partie de la date, les données manquantes seront définies par défaut.

Je suppose que vous "imprimez" alors cet objet Date, mais sans spécifier un format comme vous l'avez fait lors de son analyse. Utilisez le même SimpleDateFormat mais appelez la méthode inverse, format (Date) comme suggéré par Holger

6
Morfic
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
String cunvertCurrentDate="06/09/2015";
Date date = new Date();
date = df.parse(cunvertCurrentDate);
2
user5172411

Je convertis String en Date au format ("aaaa-MM-jj") pour l'enregistrer dans la base de données Mysql.

 String date ="2016-05-01";
 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
 Date parsed = format.parse(date);
 Java.sql.Date sql = new Java.sql.Date(parsed.getTime());

sql c'est ma sortie au format date

1
mahdi kallel