Datas com java 8
Thu thu thu thu paaaa! Ordinária!!!!!!!
E ai galera, hoje vamos falar um pouco mais sobre java 8. Neste, vamos conhecer como trabalhar com a nova API de datas (Manolo! ficou uma mão na rodis! :p).
Vamos lá!
O projeto foi baseado no projeto Joda Time, conta com uma interface fluente, além de ser totalmente imultável!
Para obter a data de hoje é simples assim:
1
| LocalDate hoje = LocalDate.now(); |
A classe LocalDate representa uma data. Para representar datas com horários, ou um simples horário, usaremos as classes LocalDateTime e LocalTime.
1
2
| LocalDateTime agora = LocalDateTime.now(); LocalTime horario = LocalTime.now(); |
Também podemos criar uma data específica utilizando o método estático of. Note que os meses na nova api vão de 1 (janeiro) a 12 (dezembro), diferente da classe Calendar que tratavam os meses de 0 a 11. Também é possível utilizar o enum Month para representar os meses, tornando o código ainda mais legível.
1
2
3
| LocalDate natal = LocalDate.of( 2014 , 12 , 25 ); LocalDate natalMelhor = LocalDate.of( 2014 , Month.DECEMBER, 25 ); LocalDate comStaticImport = LocalDate.of( 2014 , DECEMBER, 25 ); |
Podemos de forma simples incrementar ou decrementar dias, meses, anos e semanas a partir de qualquer objeto do tipo LocalDate. Para isso podemos usar os métodos plusXX eminusXX.
1
2
3
| LocalDate daqui15Dias = hoje.plusDays( 15 ); LocalDate haUmAnoAtras = hoje.minusYears( 1 ); LocalDate dataProximoEvento = LocalDate.now().plusWeeks( 1 ); |
Imagine que queremos saber em qual dia da semana foi o último natal. Com quantas linhas você faria isso com Calendar? :)
1
2
3
| DayOfWeek diaUltimoNatal_ = hoje.minusYears( 1 ) .withMonth(Month.DECEMBER.getValue()).withDayOfMonth( 25 ) .getDayOfWeek(); |
Assim como ocorre com LocalDate e LocalTime, também temos uma classe para representar o dia da semana. Bem melhor que o int retornado pela API anterior.
Também podemos contar com métodos para intercalar datas com horários. Os métodos at são muito bons para isso.
1
| LocalDateTime amanhaAs14 = hoje.plusDays( 1 ).atTime( 14 , 00 ); |
Podemos comparar datas com os métodos isAfter, isBefore e isEqual. Que tal verificar se a data do próximo evento está no futuro.
1
| boolean eventoNoFuturo = dataProximoEvento.isAfter(hoje); |
Para formatar datas, não precisaremos mais de classes externas. Podemos usar o método format presente nas próprias classes. O método format retorna uma String.
1
2
3
4
5
| String dataISO = hoje.format(DateTimeFormatter.ISO_DATE); // 2014-05-31 String dataBR = hoje.format(DateTimeFormatter.ofPattern( "dd/MM/yyyy" )); // 31/05/2014 |
Espero que tenham gostado, é possível fazer várias coisas além deste exemplo. Até a próxima \0/
Comentários
Postar um comentário