学习JDK新增的时间的原因
JDK8新增的时间
LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime的用法和LocalDate大致相同,示例:
package com.zz.TimeAdd;
import java.time.LocalDate;
public class Test {
public static void main(String args[]){
//1.获取本地日期对象(不可变对象)
LocalDate ld = LocalDate.now();//年 月 日
System.out.println(ld);
//2.获取日期对象中的信息
int year = ld.getYear();//年
int month = ld.getMonthValue();//月(1-12)
int day = ld.getDayOfMonth();//日
int dayOfYear = ld.getDayOfYear();//一年中的第几天
int dayOfWeek = ld.getDayOfWeek().getValue();//星期几
System.out.println(year);
System.out.println(dayOfWeek);
System.out.println(dayOfYear);
//3.直接修改某个信息:withYear,withMonth,withDayOfMonth,withDayOfYear
LocalDate ld2 = ld.withYear(2099);
System.out.println(ld2);
//4.把某个信息价多少:plusYears,plusMonths,plusDays,plusWeeks
LocalDate ld3 = ld.plusMonths(3);
System.out.println(ld3);
//5.把某个减多少,minusYears,minusMonths,minusDays,minusWeeks
LocalDate ld4 = ld.minusYears(1);
System.out.println(ld4);
//6.获取指定日期的LocalDate对象, public static LocalDate of(int year, int month, int day)
LocalDate ld5 = LocalDate.of(2089, 12, 13);
LocalDate ld6 = LocalDate.of(2089, 12, 13);
System.out.println(ld5);
//7.判断2个日期对象,是否相等个,在前还是在后:equals isBefore isAfter
System.out.println(ld5.equals(ld6));
System.out.println(ld5.isAfter(ld));
System.out.println(ld5.isBefore(ld));
}
}
注意: LocalDateTime可以转换成LocalDate、LocalTime
/**
* LocalDateTime可以转换成LocalDate、LocalTime
* public localDate toLocalDate()
* public localTime toLocalTime()
* public static LocalDateTime of(LocalDate date, LocalTime time)
*/
LocalDateTime ldt = LocalDateTime.now();
LocalDate ld7 = ldt.toLocalDate();
LocalTime lt = ldt.toLocalTime();
LocalDateTime ldt1 = LocalDateTime.of(ld7, lt);
LocalDate的常用API(都是处理年、月、日、星期相关的)
LocalTime的常用API(都是处理时、分、秒、纳秒相关的)
LocalDateTime的常用API(可以处理年、月、日、星期、时、分、秒、纳秒等信息)
时区
概念
ZoneId时区的常见方法
示例
package com.zz.TimeAdd.zoneId;
import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Test {
public static void main(String args[]){
//1.ZoneId的常见用法,了解时区和带时区的时间
//public static ZoneId systemDefault():获取系统默认的时区
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId.getId());
//public static Set<String> getAvailableZoneIds():获取Java支持的全部时区Id
System.out.println(ZoneId.getAvailableZoneIds());
//public static ZoneId of(String zoneId):把某个时区id封装成ZoneId对象
ZoneId zoneId1 = ZoneId.of("America/New_York");
//2.ZonedDateTime:带时区的时间
//public static ZonedDateTime now(ZoneId zone):获取某个时区的ZonedDateTime对象。
ZonedDateTime now = ZonedDateTime.now(zoneId1);
System.out.println(now);
//世界标准时间
ZonedDateTime now1 = ZonedDateTime.now(Clock.systemUTC());
System.out.println(now1);
//public static ZonedDateTime now():获取系统默认时区的ZonedDateTime对象
ZonedDateTime now2 = ZonedDateTime.now();
System.out.println(now2);
}
}
Instant
-
作用:用来记录代码的执行时间,或用于记录用户操作某个事件的时间点。
- 传统的Date类,只能精确到毫秒,并且是可变独享;
- 新增的Instant类,可以精确到纳秒,并且是不可变对象,推荐用Instant代替Date。
代码示例
package com.zz.TimeAdd.Instant;
import java.time.Instant;
public class Test {
public static void main(String args[]){
//1.创建Instant的对象,获取此刻时间信息
Instant now = Instant.now();
//2.获取总秒数
long second = now.getEpochSecond();
System.out.println(second);
//3.不够1的纳秒数
int nano = now.getNano();
System.out.println(nano);
System.out.println(now);
Instant instant = now.plusNanos(111);
//Instant对象的作用,做代码的性能分析,记录用户的操作某个事件的时间点
Instant now1 = Instant.now();
//代码执行
Instant now2 = Instant.now();
}
}
DataTimeFormat
代码示例
package com.zz.TimeAdd.DateTimeFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Test {
public static void main(String args[]){
//1.创建一个日期时间格式化器对象出来。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
//2.对时间进行格式化
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
String rs = formatter.format(now);//正向格式化
System.out.println(rs);
//格式化时间,其实还有一种方案
String rs2 = now.format(formatter);//反向格式化
System.out.println(rs2);
//4.解析时间:解析时间一般是会用LocalDateTime提供的解析方法来解析
String dateStr = "2029年12月12日 12:12:12";
LocalDateTime ldt = LocalDateTime.parse(dateStr,formatter);
System.out.println(ldt);
}
}