227 votes

Conversion de la date du calendrier en format yyyy-MM-dd en java

Comment convertir la date du calendrier au format yyyy-MM-dd.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);            
Date inActiveDate = null;
try {
    inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

cela produira inActiveDate = Wed Sep 26 00:00:00 IST 2012. Mais ce dont j'ai besoin est 2012-09-26 Mon but est de comparer cette date avec une date dans la base de données en utilisant les critères d'Hibernate. J'ai donc besoin de l'objet date au format yyyy-MM-dd :(

5 votes

Votre code est confus. Essayez-vous de formater un Date a yyyy-MM-dd ou analyser une chaîne de caractères à partir de yyyy-MM-dd à un Date valeur ? Pour formater la date, il suffit d'utiliser format1.format(date) pour l'analyser, utilisez format1.parse(someStringValueInTheCorrectFormat)

0 votes

J'ai édité ma question Désolé pour l'erreur précédente

9 votes

Une seule ligne : ( new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" ) ).format( Calendar.getInstance().getTime() );

364voto

MadProgrammer Points 161522

A Java Date est un conteneur pour le nombre de millisecondes depuis le 1er janvier 1970, 00:00:00 GMT.

Lorsque vous utilisez quelque chose comme System.out.println(date) Java utilise Date.toString() pour imprimer le contenu.

La seule façon de le changer est de remplacer Date et fournir votre propre implémentation de Date.toString() . Avant de lancer votre IDE et d'essayer, je ne le ferais pas ; cela ne ferait que compliquer les choses. Il est préférable de formater la date au format que vous souhaitez utiliser (ou afficher).

Ce que vous pouvez faire, c'est formater la date.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Ouput "Wed Sep 26 14:23:28 EST 2012"

String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"

System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"

Il s'agit en fait de la même date, représentée différemment.

0 votes

Est-il possible d'obtenir la date de demain sans utiliser la classe de calendrier ?

1 votes

En quelque sorte, mais c'est beaucoup plus facile avec Calendar

1 votes

Comment supprimer complètement le fuseau horaire de cet objet calendaire ?

22voto

Votre code est faux. Il est inutile d'analyser la date et de la conserver en tant qu'objet Date.

Vous pouvez formater l'objet date du calendrier lorsque vous souhaitez l'afficher et le conserver sous forme de chaîne.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
String inActiveDate = null;
try {
    inActiveDate = format1.format(date);
    System.out.println(inActiveDate );
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

13voto

Basil Bourque Points 8938

El réponse de MadProgrammer est correct, en particulier le conseil sur Joda-Time . Le successeur de Joda-Time est maintenant intégré dans le système de gestion de l'environnement. Java 8 comme le nouveau paquet java.time . Voici un exemple de code en Java 8 beta 129.

Lorsque l'on travaille avec une date-heure (par opposition à une date locale), la fonction fuseau horaire en critique. Le jour du mois dépend du fuseau horaire. Par exemple, l'Inde a +05:30 d'avance sur l'UTC, alors que la France n'a qu'une heure d'avance, de sorte qu'un moment dans un nouveau jour en Inde a une date alors que le même moment en France a la date "d'hier". Créer une chaîne de sortie sans aucune information sur le fuseau horaire ou le décalage crée une ambiguïté. Vous avez demandé une sortie YYYY-MM-DD et je l'ai fournie, mais je ne la recommande pas. Au lieu de ISO_LOCAL_DATE J'aurais utilisé ISO_DATE pour obtenir ce résultat : 2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

Dump à la console

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

Quand on court

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

6voto

AVD Points 57984

java.util.Date ne peut pas représenter date en personnalisé à la place, vous devez utiliser SimpleDateFormat.format qui renvoie string .

String myString=format1.format(date);

2voto

ElderMael Points 3226

Afin d'analyser un java.util.Date vous devez d'abord le convertir en String en utilisant votre propre format.

inActiveDate = format1.parse(  format1.format(date)  );

Mais je crois que vous êtes redondant ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X