web-dev-qa-db-fra.com

Date du calendrier au format aaaa-MM-jj 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, 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 d'Hibernate. J'ai donc besoin de l'objet de date au format yyyy-MM-dd.

186
1355

Un DateJava est un conteneur représentant 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 Dateet de fournir votre propre implémentation de Date.toString(). Maintenant, avant de lancer votre IDE et d’essayer ceci, je ne le ferais pas; cela ne fera que compliquer les choses. Vous feriez mieux de 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 ThreeTen Backport

Les éléments suivants sont conservés à des fins historiques (en tant que 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ée différemment.

318
MadProgrammer

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

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

Java.time

Le réponse de MadProgrammer est correct, en particulier le conseil concernant Joda-Time . Le successeur de Joda-Time est maintenant intégré à Java 8 en tant que nouveau package Java.time . Voici un exemple de code en Java 8.

Lorsque vous travaillez avec date-heure (par opposition à date locale), le fuseau horaire est essentiel. Le jour du mois dépend du fuseau horaire. Par exemple, le fuseau horaire indien correspond à +05:30 (cinq heures et demie avant UTC), tandis que France ne dispose que d'une heure. Ainsi, un moment dans un nouveau jour en Inde a une date alors que le même moment en France a une date "hier". La création d'une sortie chaîne dépourvue d'informations de décalage horaire ou de fuseau horaire crée une ambiguïté. Vous avez demandé une sortie AAAA-MM-JJ, alors je l'ai fournie, mais je ne le recommande pas. Au lieu de ISO_LOCAL_DATE j'aurais utilisé ISO_DATE pour 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 );

Décharger pour consoler…

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

Quand couru…

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 , 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, le 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 tous deux 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 différentes valeurs date-heure.

13
Basil Bourque

L'objet Java.util.Date ne peut pas représenter date au format personnalisé. Vous devez plutôt utiliser la méthode SimpleDateFormat.format qui renvoie string.

String myString=format1.format(date);
6
adatapost

Pour analyser un objet 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.

2
ElderMael
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 dans le format mois, jour et année dans un volet de fenêtre JOption.

2
Drew
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);
}
1
Petr

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.

Convertissez donc la date de la chaîne Java au format en utilisant select 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/

0
JavaLearner
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;
    }
0
Unnati Solanki