Date du calendrier au format aaaa-MM-jj en Java

210

Comment convertir la date du calendrier au yyyy-MM-ddformat.

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, c'est 2012-09-26. Mon but est de comparer cette date avec une autre date dans ma base de données en utilisant les critères Hibernate. J'ai donc besoin de l'objet date au yyyy-MM-ddformat.

Sarika.S
la source
5
Votre code est déroutant. Essayez-vous de formater un Dateà yyyy-MM-ddou d'analyser une chaîne de yyyy-MM-ddà une Datevaleur ?? Pour formater la date, utilisez simplement format1.format(date), pour l'analyser, utilisezformat1.parse(someStringValueInTheCorrectFormat)
MadProgrammer
J'ai édité ma question .. Désolé pour l'erreur précédente ..
Sarika.S
9
un paquebot:( new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" ) ).format( Calendar.getInstance().getTime() );
Iwan Aucamp

Réponses:

342

Un Java Dateest 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 passer outre Date et de fournir votre propre implémentation de Date.toString(). Maintenant, avant de lancer votre IDE et d'essayer cela, je ne le ferais pas; cela ne fera que compliquer les choses. Il vaut mieux formater la date au format que vous souhaitez utiliser (ou afficher).

Java 8+

LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"

String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12

Avant Java 8

Vous devriez utiliser le backport ThreeTen

Ce qui suit est conservé à des fins historiques (comme réponse originale)

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());
// Output "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"

Ce sont en fait la même date, représentés différemment.

MadProgrammer
la source
1
En quelque sorte, mais c'est beaucoup plus facile avecCalendar
MadProgrammer
1
Quoi qu'il en soit pour supprimer complètement le fuseau horaire de cet objet de calendrier?
Sarika.S
2
Si vous êtes vraiment sérieux au sujet de la manipulation de la date et de l'heure, jetez un œil à Joda Time , c'est beaucoup plus facile que de Calendar
jouer
2
@ n13 si la question portait sur la manipulation de la date de la base de données ou même la manipulation de l'heure, je pourrais être d'accord avec vous. La question était de savoir comment représenter une valeur de date dans un format de date particulier
MadProgrammer
1
Réponse bien structurée - il s'agit essentiellement d'une séparation Modèle (Date) -Vue (Format).
YoYo
19

Votre code est incorrect. Aucun point d'analyse de la date et gardez-le comme objet Date.

Vous pouvez formater l'objet date de 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();
}
Niroshan Abayakoon
la source
13

java.time

La réponse de MadProgrammer est correcte, en particulier l'astuce sur Joda-Time . Le successeur de Joda-Time est désormais intégré à Java 8 en tant que nouveau package java.time . Voici un exemple de code en Java 8.

Lorsque vous travaillez avec la date-heure (par opposition à la date locale), le fuseau horaire est critique. Le jour du mois dépend du fuseau horaire. Par exemple, le fuseau horaire de l' Inde est +05:30(cinq heures et demie d'avance sur UTC), tandis que la France n'a qu'une heure d'avance. Ainsi, un moment dans un nouveau jour en Inde a une date alors que le même moment en France a la date «d'hier». La création d'une sortie de chaîne sans informations de fuseau horaire ou de décalage crée une ambiguïté. Vous avez demandé une sortie AAAA-MM-JJ donc je l'ai fournie, mais je ne la recommande pas. Au lieu de ISO_LOCAL_DATEj'aurais utilisé ISO_DATEpour obtenir cette sortie: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 sur console…

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

Lors de l'exécution ...

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

Joda-Time

Code similaire utilisant la bibliothèque Joda-Time , le précurseur de java.time.

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

ISO 8601

Soit dit en passant, ce format de votre chaîne d'entrée est un format standard, l'un des nombreux formats de chaîne date-heure pratiques définis par ISO 8601 .

Joda-Time et 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îne de diverses valeurs de date-heure.

Basil Bourque
la source
6

java.util.Datel'objet ne peut pas représenter la date dans un format personnalisé , mais vous devez utiliser une SimpleDateFormat.formatméthode qui renvoie string.

String myString=format1.format(date);
adatapost
la source
2

Pour analyser un java.util.Dateobjet, vous devez d'abord le convertir en chaîne en utilisant votre propre format.

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

Mais je crois que vous êtes redondant ici.

ElderMael
la source
2
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
Date date = c.getTime();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
JOptionPane.showMessageDialog(null, ft.format(date));

Cela affichera votre date + 7 jours au format mois, jour et année dans un volet de fenêtre JOption.

A dessiné
la source
2
public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month, date);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
    String formatted = format1.format(cal.getTime());
    System.out.println(formatted);
}
Petr
la source
2
Bienvenue chez SO. Veuillez ajouter un peu de contexte / explication, car les réponses uniquement codées ne répondent pas à nos normes. Voir stackoverflow.com/help/how-to-answer
Uwe Allner
0

J'ai trouvé ce code où la date est comparée dans un format à comparer avec le champ de date dans la base de données ... peut-être que cela pourrait vous être utile ...

Lorsque vous convertissez la chaîne en date à l'aide de simpledateformat, il est difficile de comparer avec le champ Date dans les bases de données mysql.

Donc, convertissez la date de la chaîne java au format en utilisant STR_to_DATE ('yourdate', '% m /% d /% Y') -> dans ce format, vous obtiendrez alors le format de date exact du champ de date mysql.

http://javainfinite.com/java/java-convert-string-to-date-and-compare/

JavaLearner
la source
3
Les réponses de lien uniquement sont déconseillées sur StackOverflow en raison de la rotation des liens et d'autres problèmes. Pouvez-vous résumer les informations avec des points clés?
Basil Bourque
0
public static String ThisWeekStartDate(WebDriver driver) {
        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("Before Start Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("Start Date " + CurrentDate);
          return CurrentDate;

    }
    public static String ThisWeekEndDate(WebDriver driver) {

        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println("Before End Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("End Date " + CurrentDate);
          return CurrentDate;
    }
Unnati Solanki
la source