JDK1.8时间工具类

JDK1.8时间工具类

一、特点:比起Date类和Calendar类,jdk1.8的时间类更全面、线程安全、可修改

二、JDK1.8各时间类特点及应用

2.1、LocalDate类

 //取当前日期
LocalDate today=LocalDate.now();
System.out.println("today = " + today);
输出:today = 2020-11-24
 LocalDate ld = LocalDate.now();
 System.out.println(ld);
 int ofYear = ld.getDayOfYear();
 Date date = new Date();
 GregorianCalendar calendar = new GregorianCalendar();
// 设置当前日期date 
calendar.setTime(date);
 calendar.add(Calendar.YEAR,1);// 日期往后,增加一年,整数往后推,负数往前移动
//获取一年后的日期
 date=calendar.getTime();
// 设置日期格式
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 System.out.println("一年后今天的日期:"+sdf.format(date));
 System.out.println("当前一年中的第几天:"+ofYear);
一年后今天的日期:2021-12-01
当前一年中的第几天:336

 

 //取当前日期
 LocalDate today=LocalDate.now();
 //获取当前是一周的第几天
 int dayOfWeek = today.getDayOfWeek().getValue();
 System.out.println("dayOfWeek = " + dayOfWeek);
 //获取当前日
 int dayOfMonth = today.getDayOfMonth();
 System.out.println("dayOfMonth = " + dayOfMonth);
 //获取当前是一年中的第几天
 int dayOfYear = today.getDayOfYear();
 System.out.println("dayOfYear = " + dayOfYear);
 //获取当前月
 int monthValue = today.getMonthValue();
 System.out.println("monthValue = " + monthValue);
 //获取当前年
 int year = today.getYear();
 System.out.println("year = " + year);
输出:
dayOfWeek = 2
dayOfMonth = 24
dayOfYear = 329
monthValue = 11
year = 2020
 //根据年月日取日期,12月就是12月,月份不需要像date和calendar类0-11
 LocalDate myDate = LocalDate.of(2020, 11, 11);
 System.out.println("myDate = " + myDate);
输出:myDate = 2020-11-11
  •  
 //根据字符串取1:(必须严格按照格式:yyyy-MM-dd)
LocalDate parseStr1 = LocalDate.parse("2020-11-24");
System.out.println("parseStr1 = " + parseStr1);
输出:parseStr1 = 2020-11-24
  •  
 //根据字符串取2:(自定义格式)
LocalDate parseStr2 = LocalDate.parse("2020/08/02", DateTimeFormatter.ofPattern("yyyy/MM/dd"));
System.out.println("parseStr2 = " + parseStr2);
输出:parseStr2 = 2020-08-02
  •  
//取本月第一天
LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("firstDayOfMonth = " + firstDayOfMonth);
输出:firstDayOfMonth = 2020-11-01
//取本月第2天:
LocalDate secondDayOfMonth = today.withDayOfMonth(2);
System.out.println("secondDayOfMonth = " + secondDayOfMonth);
输出:secondDayOfMonth = 2020-11-02
//取本月最后一天
LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("lastDayOfMonth = " + lastDayOfMonth);
输出:lastDayOfMonth = 2020-11-30
  •  
 //取下一天
LocalDate tomorrow = lastDayOfMonth.plusDays(1);
System.out.println("tomorrow = " + tomorrow);
输出:tomorrow = 2020-12-01
  •  
 //取2020年11月第一个周一
LocalDate firstMondayOf2020 = LocalDate.parse("2020-11-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println("firstMondayOf2020 = " + firstMondayOf2020);
输出:firstMondayOf2020 = 2020-11-02
  •  
//几个使用方法
LocalDate today = LocalDate.now();

//判断 today 是否为闰年
boolean isLeapYear = today.isLeapYear();
System.out.println("isLeapYear = " + isLeapYear);

//获取 today 是该年的第几季度
int quarterOfYear = today.get(IsoFields.QUARTER_OF_YEAR);
System.out.println("quarterOfYear = " + quarterOfYear);

//获取 today 是该季度的第几天
int daysOfQuarter = today.get(IsoFields.DAY_OF_QUARTER);
System.out.println("daysOfQuarter = " + daysOfQuarter);
  •  
输出:
isLeapYear = true
quarterOfYear = 4
daysOfQuarter = 55

2.2、LocalTime类

//获取当前时间(带有毫秒)
LocalTime timeMills = LocalTime.now();
System.out.println("timeMills = " + timeMills);
//在timeMills的基础上获取不带毫秒的time
//nanoSecond纳秒,十亿分之一秒
LocalTime time1 = timeMills.withNano(0);
System.out.println("time1 = " + time1);

//设置并得到时间对象
LocalTime time2 = LocalTime.of(12, 00, 00);
System.out.println("time2 = " + time2);

//解析时间字符串
LocalTime parseStr1 = LocalTime.parse("12:30:00");
System.out.println("parseStr1 = " + parseStr1);
LocalTime parseStr2 = LocalTime.parse("12时30分00秒", DateTimeFormatter.ofPattern("HH时mm分ss秒"));
System.out.println("parseStr2 = " + parseStr2);

//获取一天的第多少秒的时间对象
LocalTime time3 = LocalTime.ofSecondOfDay(18 * 60 * 60 + 60 * 30);
System.out.println("time3 = " + time3);

//MIN、MAX、 NOON、 MIDNIGHT
//MIN和MIDNIGHT都是00:00,意味一天的开始
//NOON是中午12:00,意味着半天
//MAX是23:59:59.999999999,意味着一天的结束
System.out.println("MIN = " + LocalTime.MIN);
System.out.println("MIDNIGHT = " + LocalTime.MIDNIGHT);
System.out.println("NOON = " + LocalTime.NOON);
System.out.println("MAX = " + LocalTime.MAX);
输出:
timeMills = 22:58:55.326
time1 = 22:58:55
time2 = 12:00
parseStr1 = 12:30
parseStr2 = 12:30
time3 = 18:30
MIN = 00:00
MIDNIGHT = 00:00
NOON = 12:00
MAX = 23:59:59.999999999
//获取当前时间(带有毫秒)
LocalTime timeMills = LocalTime.now();
System.out.println("timeMills = " + timeMills);
//在timeMills的基础上获取不带毫秒的time
//nanoSecond纳秒,十亿分之一秒
LocalTime time = timeMills.withNano(0);
System.out.println("time = " + time);

//获取时
int hour = time.getHour();
System.out.println("hour = " + hour);
//获取分
int minute = time.getMinute();
System.out.println("minute = " + minute);
//获取秒
int second = time.getSecond();
System.out.println("second = " + second);

//下班时间
LocalTime workOver = LocalTime.of(18, 30, 00);

//睡觉时间
LocalTime sleepTime = LocalTime.of(23, 30, 00);

//判断现在是否是下班时间
boolean after = time.isAfter(workOver);
System.out.println("after = " + after);
//判断现在是否是睡觉时间
boolean before = time.isBefore(sleepTime);
System.out.println("before = " + before);

//现在和下班时间比较
int i = time.compareTo(workOver);
System.out.println("i = " + i);
//现在和睡觉时间比较
int j = time.compareTo(sleepTime);
System.out.println("j = " + j);

//获取离现在1个半小时的时间
LocalTime time2 = time.plusHours(1).plusMinutes(30);
System.out.println("time2 = " + time2);
输出:
timeMills = 23:11:22.379
time = 23:11:22
hour = 23
minute = 11
second = 22
after = true
before = true
i = 1
j = -1
time2 = 00:41:22

2.3、LocalDateTime类

//LocalDateTime
LocalDateTime dateTime=LocalDateTime.now();
System.out.println("dateTime="+dateTime);
		
//获取年月日时分秒
int year=dateTime.getYear();
System.out.println("year="+year);
int month=dateTime.getMonthValue();
System.out.println("month="+month);
int date=dateTime.getDayOfMonth();
System.out.println("date="+date);
int hour=dateTime.getHour();
System.out.println("hour"+hour);
int minute=dateTime.getMinute();
System.out.println("minute="+minute);
int second=dateTime.getSecond();
System.out.println("second="+second);
		
//格式化时间
LocalDateTime dateTime2=LocalDateTime.parse("2020-12-12 08:08:30.116", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println("dateTime2="+dateTime2);
//打印dateTime2前五天、后一月
System.out.println("dateTime2前五天"+dateTime2.plusDays(-5));
System.out.println("dateTime2后一月"+dateTime2.plusMonths(1));
		
		
//创建指定时间
LocalDateTime dateTime3=LocalDateTime.of(2020, 11, 11, 11, 11,11,11);
System.out.println("dateTime3="+dateTime3);
//比较dateTime2和dateTime3
System.out.println("dateTime2是否比dateTime3早:"+dateTime2.isBefore(dateTime3));
System.out.println("dateTime2是否比dateTime3晚:"+dateTime2.isAfter(dateTime3));
输出:
dateTime=2020-11-25T16:28:22.799
year=2020
month=11
date=25
hour16
minute=28
second=22
dateTime2=2020-12-12T08:08:30.116
dateTime2前五天2020-12-07T08:08:30.116
dateTime2后一月2021-01-12T08:08:30.116
dateTime3=2020-11-11T11:11:11.000000011
dateTime2是否比dateTime3早:false
dateTime2是否比dateTime3晚:true

2.4、Period、ChronoUnit 、Duration 类

  1. Period(具体相差的年月日)
//创建第一个日期对象(你的名字上映日期)
LocalDate date1=LocalDate.of(2016, 12, 02);
//创建第二个日期对象(天气之子上映日期)
LocalDate date2=LocalDate.of(2019, 1, 01);
Period period=Period.between(date1, date2);
//打印两个日期相差
System.out.println("相差年数:"+period.getYears()+",相差月数:"+period.getMonths()+",相差天数:"+period.getDays());
输出:
相差年数:2,相差月数:0,相差天数:30
  1. ChronoUnit (日期周期单位的标准集合,也可以计算相差时分秒)
//创建第一个日期对象(你的名字上映日期)
LocalDate date1=LocalDate.of(2016, 12, 02);
//创建第二个日期对象(天气之子上映日期)
LocalDate date2=LocalDate.of(2019, 1, 01);
//打印两个日期相差
System.out.println("相差年数:"+ChronoUnit.YEARS.between(date1, date2)+",相差月数:"+ChronoUnit.MONTHS.between(date1, date2)+",相差天数:"+ChronoUnit.DAYS.between(date1, date2));
输出:
相差年数:2,相差月数:0,相差天数:30
  • ration (这个类以秒和纳秒为单位建模时间的数量或数量)
// 获取现在的时间戳
Instant instant1 = Instant.now();
// 获取离现在的30秒的时间戳
Instant instant2 = instant1.plus(Duration.ofSeconds(30));
System.out.println("增加之后的时间 : " + instant2);
System.out.println("相差毫秒 : " + Duration.between(instant1, instant2).toMillis());
System.out.println("相毫秒 : " + Duration.between(instant1, instant2).getSeconds());
输出:
增加之后的时间 : 2020-11-25T08:45:38.312Z
相差毫秒 : 30000
相毫秒 : 30

4.总结
Period–>LocalDate
Duration–>LocalTime
ChronoUnit–>LocalDatetime

2.5、Clock、ZonedDateTime、ZoneId(时区)类

  1. Clock(Clock时钟类用于获取当时的时间戳,或当前时区下的日期时间信息)
Clock clock1=Clock.systemUTC();
System.out.println("当前时间戳:"+clock1.millis());
Clock clock2=Clock.system(ZoneId.of("Asia/Shanghai"));
System.out.println("亚洲上海此时的时间戳:"+clock2.millis());
Clock clock3=Clock.system(ZoneId.of("America/New_York"));
System.out.println("美国纽约此时的时间戳:"+clock2.millis());
  •  
输出:
当前时间戳:1606294357632
亚洲上海此时的时间戳:1606294357753
美国纽约此时的时间戳:1606294357756
  • teTime(获取时间 和时区)
ZoneId zoneId= ZoneId.of("America/Los_Angeles");
ZonedDateTime dateTime=ZonedDateTime.now(zoneId);
System.out.println("美国洛杉矶此时的时间 : " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
System.out.println("美国洛杉矶此时的时间 和时区: " + dateTime);
输出:
美国洛杉矶此时的时间 : 2020-11-25 00:55:55.086
美国洛杉矶此时的时间 和时区: 2020-11-25T00:55:55.086-08:00[America/Los_Angeles]

参考博客一:https://blog.csdn.net/cauchy6317/article/details/99005855
参考博客二:https://blog.csdn.net/cauchy6317/article/details/99298830
参考博客三:https://www.cnblogs.com/pxblog/p/13453817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值