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
-
O uso de dois construtores
构造器一: Date():创建一个当前时间的Date对象 构造器二:创建指定毫秒数的Date对象
-
O uso de dois métodos
toString():显示当前年,月,日,时,分,秒 getTime():获取当前Date对象对应的毫秒数。(时间戳)
-
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);
}