English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriais Básicos de Java

Controle de fluxo do Java

Java Array

Java Orientação a Objetos (I)

Java Orientação a Objetos (II)

Java Orientação a Objetos (III)

Tratamento de Exceções Java

Java Lista (List)

Java Queue (Fila)

Conjunto Map do Java

Conjunto Set do Java

Java Entrada/Saída (I/)

Reader do Java/Writer

Outros tópicos do Java

Java 8 API de data e hora

Java 8 Novas funcionalidades

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).

API de data e hora localizada

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

Usar a API de data e hora com fuso horário

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

Java 8 Novas funcionalidades