English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Java 8Publicando novos Date-API de Tempo (JSR 310) para fortalecer ainda mais o tratamento de data e hora.
No Java antigo, a API de data e hora tinha muitos problemas, entre eles:
Não thread-safe − java.util.Date é não thread-safe, todas as classes de data são mutáveis, isso é um dos maiores problemas das classes de data do Java.
Muito mal projetado − Data do Java/A definição das classes de tempo não é consistente, existem classes de data em java.util e java.sql, além das classes usadas para formatação e parsing definidas no pacote java.text. java.util.Date contém tanto data quanto hora, enquanto java.sql.Date contém apenas data, não é razoável incluí-la no pacote java.sql. Além disso, essas duas classes têm o mesmo nome, o que é um design muito ruim.
Problemas de tratamento de fuso horário − A classe de data não oferece internacionalização, não há suporte para fuso horário, portanto, o Java introduziu as classes java.util.Calendar e java.util.TimeZone, mas elas também têm todos os problemas mencionados acima.
Java 8 em java.time O pacote oferece muitos novos API. A seguir estão dois dos mais importantes API:
Local (local) − Simplifica o tratamento de datas e horas, sem problemas de fuso horário.
Zoned (fuso horário) − Trata datas e horas através de um fuso horário especificado.
O novo pacote java.time cobre todos os tratamentos de data, hora e período./Operações de tempo, fuso horário, instâncias (instants), períodos (durante) e relógios (clock).
LocalDate/As classes LocalTime e LocalDateTime podem ser usadas em situações onde o uso de fuso horário não é necessário. O código é o seguinte:
import java.time.LocalDate; import java.time.LocalTime; import java.time.LocalDateTime; import java.time.Mês; public class Java8Tester { public static void main(String args[]) { Java8Tester java8tester = new Java8Tester(); java8tester.testLocalDateTime(); } public void testLocalDateTime() { // obter a data e hora atual LocalDateTime currentTime = LocalDateTime.now(); System.out.println("hora atual: ", + currentTime); LocalDate data1 = currentTime.toLocalDate(); System.out.println("data1: " + data1); Month mês = currentTime.getMês(); int dia = currentTime.getDiaDoMes(); int segundos = currentTime.getSecond(); System.out.println("mês: ", + mês +", dia: ", + dia +", segundos: ", + segundos); LocalDateTime data2 = currentTime.comDiaDoMes(10).comAno(2012); System.out.println("data2: " + data2); // 12 dezembro 2014 LocalDate data3 = LocalDate.of(2014, Month.DECEMBER, 12); System.out.println("data3: " + data3); // 22 horas 15 minutos LocalTime data4 = LocalTime.of(22, 15); System.out.println("data4: " + data4); // analisar string LocalTime data5 = LocalTime.parse("20:15:30); System.out.println("data5: " + data5); } }
Execute o script acima, o resultado será:
$ javac Java8Tester.java $ java Java8Tester hora atual: 2016-04-15T16:55:48.668 data1: 2016-04-15 mês: abril, dia: 15, segundos: 48 data2: 2012-04-10T16:55:48.668 data3: 2014-12-12 data4: 22:15 data5: 20:15:30
Se precisarmos considerar fusos horários, podemos usar a API de data e hora com fuso horário:
import java.time.ZonedDateTime; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]) { Java8Tester java8tester = new Java8Tester(); java8tester.testZonedDateTime(); } public void testZonedDateTime() { // Obter a data e hora atuais ZonedDateTime date1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]"); System.out.println("data1: " + data1); ZoneId id = ZoneId.of("Europe/Paris"); System.out.println("ZoneId: " + id); ZoneId currentZone = ZoneId.systemDefault(); System.out.println("Fuso horário atual: " + currentZone); } }
Execute o script acima, o resultado será:
$ javac Java8Tester.java $ java Java8Tester data1: 2015-12-03T10:15:30+08:00[Asia/Shanghai] ZoneId: Europe/Paris Fuso horário atual: Asia/Shanghai