web-dev-qa-db-fra.com

Comment convertir une date au format aaaa-MM-jj?

Samedi déc 01 00:00:00 GMT 2012

Je dois convertir la date ci-dessus au format ci-dessous

2012-12-01

Comment puis-je?

j'ai essayé avec la méthode suivante mais ça ne marche pas

public Date ConvertDate(Date date){

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    String s = df.format(date);
    String result = s;
    try {
        date=df.parse(result);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return date;
  }
28
User 1531343

Utilisez ceci.

Java.util.Date date = new Date("Sat Dec 01 00:00:00 GMT 2012");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String format = formatter.format(date);
System.out.println(format);

vous obtiendrez la sortie comme

2012-12-01
64
Nidhish Krishnan

[~ # ~] update [~ # ~] Ma réponse ici est maintenant obsolète. Le projet Joda-Time est maintenant en mode de maintenance, conseillant la migration vers les classes Java.time. Voir la solution moderne dans le réponse de Ole V.V. .

Joda-Time

La réponse acceptée par NidhishKrishnan est correcte.

Pour le plaisir, voici le même genre de code dans Joda-Time 2.3.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

Java.util.Date date = new Date(); // A Date object coming from other code.

// Pass the Java.util.Date object to constructor of Joda-Time DateTime object.
DateTimeZone kolkataTimeZone = DateTimeZone.forID( "Asia/Kolkata" );
DateTime dateTimeInKolkata = new DateTime( date, kolkataTimeZone );

DateTimeFormatter formatter = DateTimeFormat.forPattern( "yyyy-MM-dd");
System.out.println( "dateTimeInKolkata formatted for date: " + formatter.print( dateTimeInKolkata ) );
System.out.println( "dateTimeInKolkata formatted for ISO 8601: " + dateTimeInKolkata );

Quand couru…

dateTimeInKolkata formatted for date: 2013-12-17
dateTimeInKolkata formatted for ISO 8601: 2013-12-17T14:56:46.658+05:30
4
Basil Bourque
String s;
Format formatter;
Date date = new Date();

// 2012-12-01
formatter = new SimpleDateFormat("yyyy-MM-dd");
s = formatter.format(date);
System.out.println(s);
3
Vinayak

Vous ne pouvez pas formater le Date lui-même. Vous ne pouvez obtenir le résultat formaté que dans String. Utilisez SimpleDateFormat comme mentionné par d'autres.

De plus, la plupart des getter methods in Date sont deprecated.

2
Mawia

Réponse moderne: Utilisez LocalDate de Java.time, la moderne Java API de date et heure et sa méthode toString:

    LocalDate date = LocalDate.of(2012, Month.DECEMBER, 1); // get from somewhere
    String formattedDate = date.toString();
    System.out.println(formattedDate);

Cela imprime

2012-12-01

Une date (que nous parlions Java.util.Date ou Java.time.LocalDate) n’a pas de format. Tout ce qu’il a, c’est une méthode toString qui produit un format, et vous ne pouvez pas changer la méthode toString. Heureusement, LocalDate.toString _ produit exactement le format que vous avez demandé.

La classe Date est depuis longtemps obsolète et la classe SimpleDateFormat que vous avez essayé d'utiliser est notoirement gênante. Je vous recommande d'oublier ces cours et d'utiliser Java.time au lieu. L'API moderne est tellement plus agréable à utiliser.

Excepté: il arrive que vous obteniez un Date d’une API existante que vous ne pouvez pas changer ou que vous ne voulez pas changer pour le moment. La meilleure chose à faire est de le convertir en Java.time.Instant et effectuer d’autres opérations à partir de là:

    Date oldfashoinedDate = // get from somewhere
    LocalDate date = oldfashoinedDate.toInstant()
            .atZone(ZoneId.of("Asia/Beirut"))
            .toLocalDate();

Remplacez le fuseau horaire de votre choix s’il ne s’agissait pas d’Asie/Beyrouth. Ensuite, procédez comme ci-dessus.

Lien: tutoriel Oracle: Date Time , expliquant comment utiliser Java.time.

1
Ole V.V.