Notas de estudo JAVA - classes comumente usadas (3) - API sobre o tempo

Concentre-se em dominar os pacotes relacionados ao tempo recém-introduzidos pelo JDK8.0, e isso é suficiente para o desenvolvimento comum

1. Teste de API de data e hora antes do JDK8

currentTimeMillis() na classe System: Retorna a diferença de horário em milissegundos entre o horário atual e 1º de janeiro de 1970 às horas e minutos 0 segundos. chamado timestamp

classe java.util.Date
/ — classe java.sqL.Date

  1. O uso de dois construtores

    构造器一: Date():创建一个当前时间的Date对象
    构造器二:创建指定毫秒数的Date对象
    
  2. O uso de dois métodos

    toString():显示当前年,月,日,时,分,秒
    getTime():获取当前Date对象对应的毫秒数。(时间戳)
    
  3. java.sqL.Date corresponde à variável do tipo data no banco de dados
    Como instanciar
    Como converter objeto java.utiL.Date em objeto java.sqL.Date

//构造器一: Date():创建一个当前时间的Date对象
        Date date1 = new Date();
        System.out.println(date1.toString());//当前时间
        System.out.println(date1.getTime());//毫秒数
        //构造器二:创建指定毫秒数的Date对象
        Date date2 = new Date(1627392325804L);
        System.out.println(date2.toString());

        //创建java.sql.Date对象
        java.sql. Date date3 = new java.sql.Date(3523532534L);
        System.out.println(date3);
        //java.utiL.Date对象转换为java.sqL.Date对象
        java.sql. Date date4= new java.sql.Date(date1.getTime());
        System.out.println(date4);

Uso de SimpleDateFormat : Formatação e análise da classe Date por SimpleDateFormat
1. Duas operações:
1.1 Formatação: data —> string --------------> formatação (format()): data —> string
1.2 análise: o processo reverso de formatação, string —> data ------------> análise (parse()): o processo reverso de formatação, string— > data

2. Instanciação de SimpLeDateFormat

//实例化SimpleDateFormat
        SimpleDateFormat sdf=new SimpleDateFormat();//默认空参构造器

        //格式化(format()):日期--->字符串
        Date date = new Date();
        String format=sdf.format(date);
        System.out.println(format);//输出当前时间

        //解析(parse()):格式化的逆过程,字符串--->日期
        String str = "19-12-18 上午11:43" ;
        Date parse1= sdf.parse(str);
        System.out.println(parse1);

Uso da classe Calendar (classe abstrata)
Problema:
Mutabilidade: Classes como data e hora devem ser imutáveis.
Offset: O ano em Date começa em 190O e o mês começa em O.
Formatação: A formatação só é útil para Data, não para Calendário.
Além disso, eles não são thread-safe; não podem lidar com segundos bissextos, etc.

1.
Método de instanciação 1: Criar um objeto de sua subclasse (GregorianCalendar)

Método 2: Chame seu método estático getInstance() para obter a hora atual

2. Métodos comuns de calendário

pegar()

definir()

add()–>mutabilidade

getTime(): classe calendário—>Data

setTime():Data—>classe de calendário

@Test
    public void testCalendar() {
    
    
    	//实例化
        //方式一:创建其子类(GregorianCalendar)的对象
        //方式二:调用其静态方法getInstance()获取当前时间
        Calendar calendar = Calendar.getInstance();//GregorianCalendar
        //2.常用方法
        //get()
        int days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);//29
        System.out.println(Calendar.DAY_OF_YEAR);

        //set()
        calendar.set(Calendar.DAY_OF_MONTH, 29);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

        // add()-->可变性
        calendar.add(Calendar.DAY_OF_MONTH, 3);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

        //getTime():日历类--->Date
        Date date = calendar.getTime();
        System.out.println(date);

        //setTime():Date--->日历类
        Date date1 = new Date();
        calendar.setTime(date1);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
    }

2. Pacote de tempo recém-introduzido JDK8.0 (pode resolver muito bem o problema de deslocamento mencionado acima)

java.time - pacote básico contendo objetos de valor
java.time.chrono - fornece acesso a diferentes sistemas de calendário
java.time.format - formata e analisa hora e datas
java.time.temporal - inclui a estrutura subjacente e propriedades estendidas
java.time. zone - classes contendo suporte de fuso horário

Uso das classes principais : Instruções LocalDate, LocalTime, LocalDateTime : LocalDateTime é usado com mais frequência que LocalDate e LocalTime

Métodos comuns de LocalDate, LocalTime, LocalDateTime:

now(): cria um objeto, obtém a data atual, hora, data+hora

of(): Defina o ano, mês, dia, hora, minuto e segundo especificados. sem deslocamento

getXxx() retorna propriedades relacionadas

Refletir a imutabilidade comXxx(): definir atributos relacionados

imutabilidade (plusXxx() adicionado)

Imutabilidade (menosXxx() diminui)

 @Test
    public void test(){
    
    
        //now():获取当前的日期,时间,日期+时间
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDate);
        System.out.println(localTime);
        System.out.println(localDateTime);

        //of():设置指定的年,月,日,时,分,秒。没有偏移量
        LocalDateTime localDateTime1 = LocalDateTime.of(2021, 7, 28, 19, 28, 54);
        System.out.println(localDateTime1);

        //getXxx()返回相关属性
        System.out.println(localDate.getDayOfWeek());
        System.out.println(localDateTime.getDayOfMonth());
        System.out.println(localDateTime.getDayOfYear());
        System.out.println(localDateTime.getMonthValue());
        System.out.println(localDateTime.getMinute());

        //体现不可变性
        //withXxx()∶设置相关的属性
        LocalDate localDate1 = localDate.withDayOfMonth(22);
        System. out.println( localDate);
        System.out.println( localDate1);

        LocalDateTime localDateTime2 = localDateTime.withHour(4);
        System.out.println( localDateTime) ;
        System.out.println( localDateTime2);

        //不可变性(plusXxx()增加)
        LocalDateTime localDateTime3 = localDateTime.plusMonths(3);
        System. out.println( localDateTime) ;
        System.out.println( localDateTime3);

        //不可变性(minusXxx()减少)
        LocalDateTime localDateTime4 = localDateTime.minusDays(6);
        System.out.println( localDateTime) ;
        System.out.println( localDateTime4);

    }

O uso da classe Instant
é semelhante a java.util.Date (não parece muito comum)

 		//now()∶获取本初子午线对应的标准时间
        Instant instant = Instant.now();
        System.out.println(instant);//2021-07-29T12:30:09.773Z

        //添加时间的偏移量
        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);//2021-07-29T20:30:09.773+08:00

        //toEpochMilli:获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数
        long milli =instant.toEpochMilli();
        System.out.println(milli);//1627561809773

        //ofEpoch/MiLLi():通过给定的毫秒数,获取Instant实例-->Date类的getTime()
        Instant instant1 = Instant.ofEpochMilli(1627561809773L);
        System.out.println(instant1);

DateTimeFormatter : formata ou analisa data, hora **
semelhante a SimpleDateFormat **

Formatação (format()): Data ->
Análise de String (parse()): String -> Data

Formatos padrão predefinidos. Tais como:
formatos relacionados à localização iso_LOCAL_DATE_TIME; lSo_LOCAL_DATE; ISO_LOCAL_TIME. Tais como:
formato personalizado ofLocalizedDateTime(FormatStyle.LONG). Tais como: ofPattern(“aaaa-MM-dd hh:mm:ss E”)---->key master

 @Test
    public void test2(){
    
    
        LocalDateTime localDateTime=LocalDateTime.now();
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        //1.预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
        DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;

            //格式化(format()):日期--->字符串
        String str1=formatter.format(localDateTime);//2021-07-30T14:48:21.936
        System.out.println(localDateTime);//2021-07-30T14:48:21.936
        System.out.println(str1);
            //解析(parse()):字符串--->日期
        TemporalAccessor parse1 = formatter.parse("2021-07-30T14:48:21.936");
        System.out.println(parse1);

        /*
        方式二:
        本地化相关的格式一。如: ofLocalizedDateTime()
        FormatStyLe.LONG /FormatStyLe.MEDIUM /FormatStyLe.SHORT :适用于LocalDateTime
         */
        DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
            //格式化(format())
        String str2=formatter1.format(localDateTime);
        System.out.println(str2);//2021年7月30日 下午03时04分03秒

         /*
         本地化相关的格式二。如: ofLocalizedDate()
         FormatStyLe.FULL / FormatStyLe.LONG / FormatStyLe.MEDIUM /FormatStyLe.SHORT:适用于LocalDate
         */
        DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
        String str3= formatter2.format(localDate);
        System.out.println(str3);//2021-7-30


        //(重点掌握)3.自定义的格式。如: ofPattern(“yyyy-MM-dd hh:mm:ss E")
        DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss E");
            //格式化(format())
        String str4= formatter3.format(localDateTime);
        System.out.println(str4);//2021-07-30 03:11:27

            //解析(parse())
        TemporalAccessor parse2= formatter3.parse("2021-07-30 03:11:27 星期五");
        System.out.println(parse2);
    }

おすすめ

転載: blog.csdn.net/m0_46450708/article/details/119617179