Percursos
/
Java
Java
/
Programa
/
Data e hora
Da

Data e hora em Java

6 exercícios

Sobre Data e hora

O pacote java.time, introduzido no Java 8, contém várias classes para trabalhar com datas e horas.

LocalDate

A classe java.time.LocalDate representa uma data sem fuso horário no sistema de calendário ISO-8601, como 2007-12-03:

LocalDate date = LocalDate.of(2007, 12, 3);

As datas podem ser comparadas com outras datas:

LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);

date1.isBefore(date2);
// => true

date1.isAfter(date2);
// => false

Uma instância de LocalDate tem métodos de acesso para obter as partes da data:

LocalDate date = LocalDate.of(2007, 12, 3);

date.getYear();
// => 2007

date.getMonthValue();
// => 12

date.getDayOfMonth();
// => 3

Uma instância de LocalDate tem métodos para lhe adicionar unidades de tempo.

Note

Estes métodos devolvem uma nova instância de LocalDate e não atualizam a instância existente, uma vez que a classe LocalDate é imutável.

LocalDate date = LocalDate.of(2007, 12, 3);

date.plusDays(3);
// => 2007-12-06

date.plusMonths(1);
// => 2008-01-03

date.plusYears(1);
// => 2008-12-03

LocalDateTime

A classe java.time.LocalDateTime representa uma data e hora sem fuso horário no sistema de calendário ISO-8601, como 2007-12-03T10:15:30:

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);

datetime.getYear();
// => 2007

datetime.getMonthValue();
// => 12

datetime.getDayOfMonth();
// => 3

datetime.getHours();
// => 10

datetime.getMinutes();
// => 15

datetime.getSeconds();
// => 30

Tal como a classe LocalDate, uma instância de LocalDateTime tem os mesmos métodos para comparar com outras instâncias de LocalDateTime e para lhe adicionar unidades de tempo.

Também é possível converter uma instância de LocalDate numa instância de LocalDateTime:

LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"

Formatação de datas e horas

Tanto LocalDate como LocalDateTime usam a notação padrão ISO-8601 ao converter de e para uma String.

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");

datetime.isEqual(parsed);
// => true

Tentar interpretar um LocalDate ou um LocalDateTime a partir de uma String como esta com um formato diferente não é possível. Em vez disso, para formatar datas com um formato personalizado, deves usar a classe java.time.format.DateTimeFormatter:

DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse("03/12/2007", formatter);

DateTimeFormatter printer = DateTimeFormatter.ofPattern("MMMM d, yyyy");
printer.format(date);
// => "December 3, 2007"

Também podes especificar uma região ao criar o formato personalizado, para formatar e interpretar em regiões diferentes:

DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.FRENCH).format(date);
// => décembre 3, 2007

DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.of("pt")).format(date);
// => dezembro 3, 2007
Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Data e hora