java.time
A resposta do MadProgrammer está correta, especialmente a dica sobre o 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 à 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 antes do UTC), enquanto a França está apenas uma hora à frente. Assim, 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 ambiguidade. Você pediu a saída AAAA-MM-DD, então eu forneci, mas não a 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 );
Despejar no console…
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
A propósito, esse formato da sua string de entrada é um formato padrão, um dos vários formatos úteis de string de data e hora definidos pela ISO 8601 .
Joda-Time e java.time usam os formatos ISO 8601 por padrão ao analisar e gerar representações de sequência de vários valores de data e hora.
Date
parayyyy-MM-dd
ou analisar uma String deyyyy-MM-dd
para umDate
valor? Para formatar a data, simplesmente usoformat1.format(date)
, para analisá-lo, useformat1.parse(someStringValueInTheCorrectFormat)