Data do calendar para o formato aaaa-MM-dd em java

Como converter a data do calendar para o 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(); } 

Isso produzirá inActiveDate = Wed Sep 26 00:00:00 IST 2012 . Mas o que eu preciso é 2012-09-26 . Meu objective é comparar essa data com outra data no meu database usando os critérios do Hibernate. Então eu preciso do object date no formato yyyy-MM-dd .

Uma Date Java é um contêiner 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) , o Java usa Date.toString() para imprimir o conteúdo.

A única maneira de alterá-lo é replace Date e fornecer sua própria implementação de Date.toString() . Agora, antes de você acionar seu IDE e tentar isso, eu não faria isso; isso só vai complicar as coisas. É melhor que você formate a data no formato que 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

Você deve estar fazendo uso do Backport ThreeTen

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

O que você pode 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" 

Estas são na verdade a mesma data, representada de forma diferente.

Seu código está errado. Nenhum ponto de data de análise e manter isso como object Date.

Você pode formatar o object de data do calendar quando quiser exibi-lo e mantê-lo como uma string.

 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(); } 

java.time

A resposta do MadProgrammer está correta, especialmente a dica sobre Joda-Time . O sucessor do Joda-Time agora está embutido no Java 8 como o novo pacote java.time . Aqui está o código de exemplo no Java 8.

Ao trabalhar com data e hora (em oposição a data local), o fuso horário é crítico. O dia do mês depende do fuso horário. Por exemplo, o fuso horário da Índia é +05:30 (cinco horas e meia à frente da 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 string sem qualquer fuso horário ou informações de deslocamento está criando ambigüidade. Você pediu a 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 esta saída: 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 ); 

Despeje para consolar…

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

Quando correr …

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

Joda-Time

Código semelhante usando a biblioteca Joda-Time , o precursor 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

By the way, esse formato de sua seqüência de input é um formato padrão, um dos vários formatos de seqüência de data e hora acessível definidos pela ISO 8601 .

Tanto o Joda-Time quanto o java.time usam os formatos ISO 8601 por padrão ao analisar e gerar representações de string de vários valores de data e hora.

java.util.Date object java.util.Date não pode representar a data no formato personalizado , em vez disso, você deve usar o método SimpleDateFormat.format que retorna string .

 String myString=format1.format(date); 

Para analisar um object java.util.Date você precisa convertê-lo para String usando seu próprio formato.

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

Mas eu acredito que você está sendo redundante aqui.

 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)); 

Isso exibirá sua data + 7 dias no formato mês, dia e ano em um painel de janela JOption.

 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); } 

Eu encontrei este código onde a data é comparada em um formato para comparar com o campo de data no database … pode ser que isso possa ser útil para você …

Quando você converte a string em date usando o formato simpledate, é difícil comparar com o campo Date em bancos de dados mysql.

Então converta a data da string java no formato usando select STR_to_DATE (‘yourdate’, ‘% m /% d /% Y’) -> neste formato, então você irá obter o formato de data exato do campo de data do mysql.

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

 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; }