Compartilhamento de tecnologia

O futuro do processamento de tempo: uma análise completa da nova API de data e hora do Java 8

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Insira a descrição da imagem aqui

1. Melhore o plano de fundo

O Java 8 melhorou de forma abrangente o processamento de tempo e redesenhou todas as APIs relacionadas a data e hora, calendário e tempo. E coloque-os uniformemente no pacote e subpacote java.time.

Desvantagens do Java5

  1. Não é seguro para threadsjava.util.Date Não é thread-safe e você mesmo deve lidar com problemas de simultaneidade multi-thread ao usar esta classe.
  2. Design ruim :A data e a formatação da data são distribuídas em vários pacotes,java.util.Date A data padrão, o ano é a partir de1900Início, mês a partir de 1 começar, dia a partir de 0 Para começar, não há uniformidade.eDate A classe também carece de métodos relacionados para manipular datas diretamente.
  3. Dificuldade em lidar com fusos horários: Tive que escrever muito código para lidar com problemas de fuso horário devido ao design inadequado.

Plano de melhoria para Java8

  1. Segurança do fio: nova data e horaAPIThread-safe não só nãosettermétodo, e quaisquer alterações na instância retornarão uma nova instância, garantindo que a instância original permaneça inalterada.
  2. modificação de data: a nova API de data e hora fornece um grande número de métodos para modificar várias partes da data e hora e retornar uma nova instância.
  3. área: Em termos de fuso horário, a nova API de data e hora introduz o conceito de domínios.
  4. Divisão de portfólio: a API complexa original foi reorganizada e dividida em várias categorias.

2. Data e hora local

  1. Data local: Utilizado para representar uma data sem fuso horário, por exemplo: 2024-07-06.

    import java.time.LocalDate;
    import java.time.Month;
    
    public class LocalDateExample {
        public static void main(String[] args) {
            // 获取当前日期
            LocalDate today = LocalDate.now();
            System.out.println("当前日期: "   today);
    
            // 创建指定日期
            LocalDate specificDate = LocalDate.of(2024, Month.JULY, 6);
            System.out.println("指定日期: "   specificDate);
    
            // 日期操作示例
            LocalDate tomorrow = today.plusDays(1);
            System.out.println("明天的日期: "   tomorrow);
        }
    }
    
    // 输出
    当前日期: 2024-07-06
    指定日期: 2024-07-06
    明天的日期: 2024-07-07