Nós humanos geralmente precisamos representar datas mais complexas, com dias, meses, anos, fusos horários. Isso não possível através de Instant. Para tal, precisamos utilizar a classe java.time.LocalDate, ideal para representar datas do tipo Human Dates.
Existem basicamente dois tipos de classes para representar datas na nova API, as Local Date/Time (LocalDate e LocalDateTime) e a ZonedDateTime. As datas locais possuem uma data ou hora de um dia, mas sem associação fusos horários, por exemplo, 11/05/1984, que é o em que eu nasci. Porém essa data não representa um instante de tempo preciso. Precisamos usar então a classe ZonedDateTime, com ela podemos criar uma data do tipo: 11/05/1984 11:30 [America/Cayenne], que representaria o exato momento do meu nascimento. Vejamos então um primeiro exemplo do uso de LocalDate.
Como você deve ter notado, diferentemente do que ocorria em java.util.Date, não é possível instanciar uma classe LocalDate diretamente, ela também não pode ser estendida, pois é uma classe final. Além disso, a classe LocalDate é imutável, ou seja, nenhuma operação nela irá modificar os valores instanciados, seus métodos sempre retornarão uma nova instância com as modificações desejadas.
No exemplo acima foi utilizado o método now, que retorna a data corrente do sistema. Em seguida fizemos uso do método of(int ano, Month mes, int dia) que possui uma versão sobrecarregada of(int ano, int mes, int dia). Vale destacar que foi corrigida uma bizarrice que havia na versão antiga da API que usava 0 para Janeiro, e isso causava muita confusão, agora você pode usar Month.MAY ou 5 para criar uma data com mês de Maio.