Data del calendario in formato aaaa-MM-gg in java


Come convertire la data del calendario in formato 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();
}

Questo produrrà inActiveDate = Wed Sep 26 00:00:00 IST 2012. Ma quello di cui ho bisogno è 2012-09-26. Il mio scopo è confrontare questa data con un'altra data nel mio database usando i criteri di ibernazione. Quindi ho bisogno dell'oggetto date in formato yyyy-MM-dd.

Author: entpnerd, 2012-09-25

9 answers

Un Java Date è un contenitore per il numero di millisecondi dal 1 gennaio 1970, 00: 00: 00 GMT.

Quando si utilizza qualcosa come System.out.println(date), Java utilizza Date.toString() per stampare il contenuto.

L'unico modo per cambiarlo è sovrascrivere Date e fornire la propria implementazione di Date.toString(). Ora, prima di accendere il tuo IDE e provare questo, non lo farei; complicherà solo le cose. È meglio formattare la data nel formato che si desidera utilizzare (o visualizzare).

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

Prima di Java 8

Si dovrebbe fare uso del ThreeTen Backport

Quanto segue è mantenuto per scopi storici (come risposta originale)

Quello che puoi fare è formattare la data.

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"

Questi sono in realtà la stessa data, rappresentata in modo diverso.

 277
Author: MadProgrammer, 2018-05-11 07:22:24

Il tuo codice è sbagliato. Nessun punto di data di analisi e mantenerlo come oggetto Data.

È possibile formattare l'oggetto data calendario quando si desidera visualizzare e mantenerlo come stringa.

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();
}
 17
Author: Niroshan Abayakoon, 2012-09-25 04:08:56

Java.tempo

La risposta di MadProgrammerè corretta, in particolare il suggerimento su Joda-Time. Il successore di Joda-Time è ora integrato in Java 8 come il nuovo java.pacchetto orario. Ecco il codice di esempio in Java 8.

Quando si lavora con data-ora (al contrario della data locale), il fuso orario in critica. Il giorno del mese dipende dal fuso orario. Ad esempio, il India fuso orario è +05:30 (cinque e un mezze ore prima dell'UTC), mentre Francia è solo un'ora avanti. Quindi un momento in un nuovo giorno in India ha una data mentre lo stesso momento in Francia ha la data "di ieri". La creazione di output di stringhe prive di informazioni sul fuso orario o sull'offset sta creando ambiguità. Hai chiesto l'output AAAA-MM-GG, quindi l'ho fornito, ma non lo consiglio. Invece di ISO_LOCAL_DATE Avrei usato ISO_DATE per ottenere questo output: 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 );

Scarica sulla console {

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

Quando esegui {

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

Joda-Tempo

Codice simile che utilizza la libreria Joda-Time , il precursore di java.tempo.

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

ISO 8601

A proposito, quel formato della stringa di input è un formato standard, uno dei numerosi formati di stringa data-ora definiti da ISO 8601.

Sia Joda-Time che java.tempo utilizzare i formati ISO 8601 per impostazione predefinita durante l'analisi e la generazione di rappresentazioni di stringhe di vari valori data-ora.

 11
Author: Basil Bourque, 2017-05-23 11:54:48

java.util.Date l'oggetto non può rappresentare date nel formato personalizzato invece devi usare il metodo SimpleDateFormat.format che restituisce string.

String myString=format1.format(date);
 6
Author: adatapost, 2012-09-25 04:02:21

Per analizzare un oggetto java.util.Date devi prima convertirlo in Stringa usando il tuo formato.

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

Ma credo che tu sia ridondante qui.

 2
Author: ElderMael, 2012-09-25 04:02:51
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));

Verrà visualizzata la data + 7 giorni in formato mese, giorno e anno in un riquadro della finestra JOption.

 2
Author: Drew, 2015-05-16 11:37:45
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
Author: Petr, 2017-09-26 09:06:51

Ho trovato questo codice in cui la data viene confrontata in un formato da confrontare con il campo data nel database...può essere questo potrebbe essere utile a voi...

Quando si converte la stringa in data utilizzando simpledateformat, è difficile da confrontare con il campo Data nei database mysql.

Quindi converti la data della stringa java nel formato usando select STR_to_DATE ('yourdate', '% m / % d / % Y') > > in questo formato, otterrai il formato esatto della data di mysql campo.

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

 0
Author: JavaLearner, 2015-08-20 09:51:55
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
Author: Unnati Solanki, 2018-07-05 11:16:14