新时间与日期API
- 新的时间和日期API
- Instant : 时间戳
- Duration计算时间间隔,Period计算日期间隔
- 时间校正器
- 时间和日期格式化---DateTimeFormatter
新的时间和日期API
//只获取当前系统的日期
LocalDate now = LocalDate.now();
System.out.println("当前系统的日期:"+now);
//只获取当前系统的时间
LocalTime time = LocalTime.now();
System.out.println("当前系统的时间:"+time);
//获取当前系统的日期和时间
LocalDateTime lt=LocalDateTime.now();
System.out.println("当前系统时间:"+lt);
//自定义日期和时间---会产生一个新的实例
LocalDateTime endTime = LocalDateTime.of(2021, 5, 20, 5, 20, 5);
System.out.println("定制时间:"+endTime);
//在原有时间基础上进行时间的加减,返回一个新的实例,即不修改原来的时间
LocalDateTime pl = lt.plusYears(2);
System.out.println("时间增加两年:"+pl);
//获取当前日期和时间的具体信息
int year = lt.getYear();
System.out.println("当前年份:"+year);
Month month = lt.getMonth();
System.out.println("当前的月份:"+month);
LocalDateTime基本使用(包括Data转化)
Instant : 时间戳
(以Unix元年: 1970年1月1日 00:00:00 到某个时间之间的毫秒值)
Instant ins1=Instant.now();//默认获取UTC时区,与中国上海的时区相差8小时
System.out.println(ins1);
//获取偏移8小时后的时区
OffsetDateTime odt = ins1.atOffset(ZoneOffset.ofHours(8));
System.out.println(odt);
【jdk1.8特性】之Instant
Duration计算时间间隔,Period计算日期间隔
LocalDate now=LocalDate.now();
LocalDate past = LocalDate.of(2020, 1, 1);
//计算日期相隔的时间
Period between = Period.between(past, now);
System.out.println(between.getYears()+"年 "+between.getDays()+"月 "+between.getDays()+"日");
LocalDateTime now=LocalDateTime.now();
LocalDateTime past = LocalDateTime.of(2020, 1, 1,1,1,1);
//计算时间相隔
Duration between = Duration.between(past, now);
System.out.println(between);
时间校正器
时间校正器基本用法如下:
public class TemporalAdjusterDemo {
public static void main(String[] args) {
demo1();
}
/**
* 将日期调整到下个周日
*/
public static void demo1(){
LocalDate localDate = LocalDate.now();
System.out.println(localDate);
// 指定时间为这个月2号
LocalDate localDate2 = localDate.withDayOfMonth(2);
System.out.println(localDate2);
// 通过时间校正器 : 获取下一个月的一号
LocalDate localDate3 = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
System.out.println(localDate3);
// 通过时间校正器 : 获取下一个周日
LocalDate localDate4 = localDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
System.out.println(localDate4);
// 自定义下一个周一是什么时候
//通过函数式接口完成(lambda表达式)
Function<LocalDate,LocalDate> function = (localDateTime -> {
DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
LocalDate returnValue = null;
switch (dayOfWeek){
case MONDAY: returnValue = localDateTime; break;
case TUESDAY: returnValue = localDateTime.plusDays(6);break;
case WEDNESDAY: returnValue = localDateTime.plusDays(5);break;
case THURSDAY: returnValue = localDateTime.plusDays(4);break;
case FRIDAY: returnValue = localDateTime.plusDays(3);break;
case SATURDAY: returnValue = localDateTime.plusDays(2);break;
case SUNDAY: returnValue = localDateTime.plusDays(1);break;
}
return returnValue;
});
System.out.println(function.apply(localDate));
}
}
时间和日期格式化—DateTimeFormatter
//使用官方提供的日期格式:这里只列举一个,官方还提供了很多,大家可以自行尝试
DateTimeFormatter dtf3=DateTimeFormatter.ISO_DATE;
LocalDateTime now=LocalDateTime.now();
String s = dtf3.format(now);
System.out.println("官方格式化: "+s);
System.out.println("-----------------------");
DateTimeFormatter cus = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:ss:mm");
String cusf = cus.format(now);
System.out.println("自定义日期格式: "+cusf);
System.out.println("--------------------------------");
System.out.println("将格式化后的字符串转化为原来的字符串:");
LocalDateTime newDate = now.parse(cusf, cus);
System.out.println(newDate);