Formato de Data Java para Locale

Como posso encontrar o DateFormat para um determinado Locale ?

 DateFormat.getDateInstance(int,Locale) 

Por exemplo:

 import static java.text.DateFormat.*; DateFormat f = getDateInstance(SHORT, Locale.ENGLISH); 

Então você pode usar este object para formatar as Date :

 String d = f.format(new Date()); 

Se você realmente quiser saber o padrão subjacente (por exemplo, yyyy-MMM-dd ), então, como você obterá um object SimpleDateFormat volta:

 SimpleDateFormat sf = (SimpleDateFormat) f; String p1 = sf.toPattern(); String p2 = sf.toLocalizedPattern(); 

tl; dr

 DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ) .withLocale( Locale.CANADA_FRENCH ); 

java.time

As classs originais de data e hora agora são herdadas e foram suplantadas pelas classs java.time.

O DateTimeFormatter tem uma maneira simples de localizar automaticamente pelo Locale ao gerar uma String para representar o valor de data e hora. Especifique um FormatStyle para indicar o comprimento da saída (abreviada ou não).

 DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ); f = f.withLocale( Locale.CANADA_FRENCH ); 

Receba o momento atual. Observe que Locale e fuso horário não têm nada a ver um com o outro. Um determina a apresentação, o outro ajusta-se a um determinado relógio de parede . Assim, você pode ter um fuso horário na Nova Zelândia com um Locale de Locale japonês ou, neste caso, um fuso horário na Índia com uma apresentação formatada para uma pessoa Québécois ler.

 ZoneId z = ZoneId.of( "Asia/Kolkata" ); ZonedDateTime zdt = ZonedDateTime.now( z ); 

Gere uma String usando esse object formatador de localização.

 String output = zdt.format( f ); 

Sobre o java.time

O framework java.time está embutido no Java 8 e posterior. Essas classs substituem as antigas classs herdadas de data e hora legadas , como java.util.Date , Calendar e SimpleDateFormat .

O projeto Joda-Time , agora em modo de manutenção , aconselha a migration para as classs java.time .

Para saber mais, veja o Oracle Tutorial . E pesquise o Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .

Onde obter as classs java.time?

  • Java SE 8 , Java SE 9 e posterior
    • Construídas em.
    • Parte da API Java padrão com uma implementação integrada.
    • O Java 9 adiciona alguns resources e correções menores.
  • Java SE 6 e Java SE 7
    • Grande parte da funcionalidade java.time é transferida para o Java 6 e 7 no ThreeTen-Backport .
  • Android
    • O projeto ThreeTenABP adapta o ThreeTen-Backport (mencionado acima) especificamente para o Android.
    • Veja Como usar o ThreeTenABP… .

O projeto ThreeTen-Extra estende java.time com classs adicionais. Este projeto é um campo de testes para possíveis futuras adições ao java.time. Você pode encontrar algumas classs úteis aqui como Interval , YearWeek , YearQuarter e muito mais .

Existe alguma outra maneira (sem usar SimpleDateFormat cast) para recuperar padrão padrão para um determinado object Locale?

Tema relacionado.