Formatando Datas e Horários
As classes de data e hora suportam muitos métodos para obter dados deles:
LocalDate date = LocalDate.of(2020, Month.JANUARY, 20);
System.out.println(date.getDayOfWeek()); // MONDAY
System.out.println(date.getMonth()); // JANUARY
System.out.println(date.getYear()); // 2020
System.out.println(date.getDayOfYear()); // 20
Poderíamos usar essas informações para exibir informações sobre a data. No entanto, seria ser mais trabalho do que o necessário. Java fornece uma classe chamada DateTimeFormatter para nos ajudar Fora. Ao contrário da classe LocalDateTime, DateTimeFormatter pode ser usado para formatar qualquer tipo dedata e / ou hora do objeto. O que muda é o formato. DateTimeFormatter está no pacotejava.time.format .
LocalDate date = LocalDate.of(2020, Month.JANUARY, 20);
LocalTime time = LocalTime.of(11, 12, 34);
LocalDateTime dateTime = LocalDateTime.of(date, time);System.out.println(date
.format(DateTimeFormatter.ISO_LOCAL_DATE));
System.out.println(time.format(DateTimeFormatter.ISO_LOCAL_TIME));
System.out.println(dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
ISO é um padrão para datas. A saída do código anterior é assim:
2020-01-20
11:12:34
2020-01-20T11:12:34
Esta é uma maneira razoável de os computadores se comunicarem, mas provavelmente não como você quer para imprimir a data e a hora no seu programa. Felizmente existem alguns formatos pré-definidos que são mais úteis:
DateTimeFormatter shortDateTime =
DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
System.out.println(shortDateTime.format(dateTime)); // 1/20/20
System.out.println(shortDateTime.format(date)); // 1/20/20
System.out.println(shortDateTime.format(time)); // UnsupportedTemporalTypeException
Aqui dizemos que queremos um formatador localizado no formato curto pré-definido. A última linha lança uma exceção porque uma hora não pode ser formatada como uma data. O método format () édeclarado tanto nos objetos do formatador quanto nos objetos de data / hora, permitindo que você os objetos em qualquer ordem. As seguintes declarações imprimem exatamente a mesma coisa que código anterior:
DateTimeFormatter shortDateTime =
DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
System.out.println(dateTime.format(shortDateTime));
System.out.println(date.format(shortDateTime));
System.out.println(time.format(shortDateTime));
Neste livro, vamos mudar os pedidos para que você se acostume a ver os dois lados. A Tabela 3.5 mostra os métodos de formatação localizados legais e ilegais.
Existem dois formatos pré-definidos que podem aparecer no exame: SHORT e MEDIUM . o outros formatos predefinidos envolvem fusos horários, que não estão no exame.
LocalDate date = LocalDate.of(2020, Month.JANUARY, 20);
LocalTime time = LocalTime.of(11, 12, 34);
LocalDateTime dateTime = LocalDateTime.of(date, time);
DateTimeFormatter shortF = DateTimeFormatter
.ofLocalizedDateTime(FormatStyle.SHORT);
DateTimeFormatter mediumF = DateTimeFormatter
.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(shortF.format(dateTime)); // 1/20/20 11:12 AM
System.out.println(mediumF.format(dateTime)); // Jan 20, 2020 11:12:34 AM
Se você não quiser usar um dos formatos predefinidos, crie o seu próprio. Para Por exemplo, este código soletra o mês:
DateTimeFormatter f = DateTimeFormatter.ofPattern("MMMM dd, yyyy, hh:mm");
System.out.println(dateTime.format(f)); // January 20, 2020, 11:12
Antes de olharmos para a sintaxe, sabemos que você não deve memorizar o que é diferente números de cada símbolo significa. O máximo que você precisa fazer é reconhecer a data e a hora peças.
MMMM M representa o mês. Quanto mais M você tiver, mais detalhada será a saída Java. Por exemplo, M produz 1, MM gera 01, MMM produz Jan e MMMM sai janeiro.dd d representa a data no mês. Tal como acontece com mês, mais d s que você tem, mais verbose a saída de Java.
dd significa incluir o zero à esquerda para um mês de dígito único., Use , se você deseja imprimir uma vírgula (isso também aparece após o ano).
yyyy y representa o ano. yy gera um ano com dois dígitos e yyyy apresenta um ano com quatro dígitos.
hh h representa a hora. Use hh para incluir o zero inicial se você estiver produzindo um único hora do dígito.
: Use: se você deseja gerar dois pontos.
mm m representa o minuto.
Vamos fazer uma rápida revisão. Você consegue descobrir qual dessas linhas lançará uma exceção?
4: DateTimeFormatter f = DateTimeFormatter.ofPattern("hh:mm");
5: f.format(dateTime);
6: f.format(date);
7: f.format(time);
Se você fizer essa pergunta no exame, pense no que os símbolos representam. Nós temos h por hora e m por minuto. Lembre-se M (maiúscula) é mês e m (minúscula) é minuto. Nós só podemos usar este formatador com objetos contendo tempos. Portanto, a linha 6 lançará uma exceção.