Data do calendário para o formato AAAA-MM-dd em java

Como converter a data do calendário para yyyy-MM-dd Formato.

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();
}
Isto produzirá inActiveDate = Wed Sep 26 00:00:00 IST 2012. Mas o que eu preciso é ... O meu objectivo é comparar esta data com outra data na minha base de dados usando critérios de hibernação. Por isso, preciso do objecto date no formato yyyy-MM-dd.

Author: entpnerd, 2012-09-25

9 answers

Um Java Date é um recipiente para o número de milissegundos desde 1 de janeiro de 1970, 00:00:00 GMT.

Quando você usa algo como System.out.println(date), Java usa Date.toString() para imprimir o conteúdo.

A única maneira de alterá-lo é sobrepor {[[2]} e fornecer a sua própria implementação de Date.toString(). Antes de ligares a tua IDE e tentares isto, não o faria; só vai complicar as coisas. Você está melhor fora de formatar a data para o formato que você deseja usar (ou exibir).

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

Antes do Java 8

Devias estar a usar o Backport de três velocidades.

O seguinte é mantido para fins históricos (como a resposta original)

O que podes fazer, é formatar a 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"
Estes são na verdade a mesma data, representados de forma diferente.
 277
Author: MadProgrammer, 2018-05-11 07:22:24
O teu código está errado. Não há ponto de analisar a data e mantê-la como objeto de data.

Você pode formatar o objecto de data do calendário quando quiser mostrar e manter isso como um texto.

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

A resposta de MadProgrammer está correcta, especialmente a dica sobre Joda-Time . O sucessor do Joda-Time está agora incorporado em Java 8 como o novo java.pacote Temporal. Aqui está o código de exemplo em Java 8.

([11]] quando se trabalha com a data-hora( em oposição à data local), a Fuso-horário em estado crítico. O dia do mês depende do fuso horário. Por exemplo, o Fuso horário da Índia é +05:30 (cinco e meia hora antes do UTC), enquanto a França está apenas uma hora à frente. Então um momento em um novo dia na Índia tem uma data, enquanto o mesmo momento na França tem a data de "ontem". Criar saída de texto sem qualquer fuso-horário ou informação offset está criando ambiguidade. Você pediu saída AAAA-MM-DD então eu forneci, mas eu não recomendo. Em vez de ISO_LOCAL_DATE eu teria usado ISO_DATE para obter este resultado: 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 );
Despeja para consola ...
System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

Quando corre ...

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

Joda-Time

Código Similar usando a bibliotecaJoda-Time , o precursor para 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 propósito, esse formato do seu texto de entrada é um formato padrão, um dos vários formatos de texto de data-hora definidos por ISO 8601 .

Tanto o Joda-Time como o java.o tempo usa os formatos ISO 8601 por padrão ao processar e gerar representações de texto de vários valores de data-hora.
 11
Author: Basil Bourque, 2017-05-23 11:54:48

java.util.Date o objecto não pode representar Data em formato personalizado em vez disso, terá de usar o método SimpleDateFormat.format que devolve string.

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

Para processar um objecto java.util.Date, terá de O Converter primeiro para uma cadeia de caracteres, usando o seu próprio formato.

inActiveDate = format1.parse(  format1.format(date)  );
Mas acho que estás a ser redundante.
 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));

Isto irá mostrar a sua data + 7 dias no formato mês, dia e ano numa janela de Jopção.

 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

Encontrei este código onde a data é comparada num formato para comparar com o campo de data na base de dados...pode ser que isto te ajude...

Quando converter o texto até à data usando o formato simpledatformat, é difícil comparar com o campo de data nas bases de dados mysql.

Por isso converta a data do texto java no formato com a opção seleccionar Str_ To_ date('yourdate','%m/%d/%Y') --> neste formato, então irá obter o formato de data exacto da data 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