java8的日期处理
优势:
java.util.Date 和 SimpleDateFormatter 都不是线程安全的,而 LocalDate 和 LocalTime 和最基本的 String 一样,是不变类型,不但线程安全,而且不能修改。
java.util.Date 月份从0开始,一月是0,十二月是11。java.time.LocalDate 月份和星期都改成了 enum ,就不可能再用错了。
java.util.Date是一个“万能接口”,它包含日期、时间,还有毫秒数。如果你只需要日期或时间那么有一些数据就没啥用。在新的Java 8中,日期和时间被明确划分为LocalDate和LocalTime,LocalDate无法包含时间,LocalTime无法包含日期。当然,LocalDateTime才能同时包含日期和时间。
java.util.Date 推算时间(比如往前推几天/ 往后推几天/ 计算某年是否闰年/ 推算某年某月的第一天、最后一天、第一个星期一等等)要结合Calendar要写好多代码,相当麻烦。
今天简单介绍一下常用的方法:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60LocalDate localDate = LocalDate.now(); System.out.println(localDate); //下一周的星期天 LocalDate newdata = localDate.with(nextOrSame(DayOfWeek.SUNDAY)); System.out.println(newdata); //当月的最后一天 LocalDate lastDate = localDate.with(lastDayOfMonth()); System.out.println(lastDate); //表示当前月的第二周的星期天 LocalDate date1 = localDate.with(dayOfWeekInMonth(2,DayOfWeek.SUNDAY)); System.out.println(date1); //当前月的第一天 LocalDate date2 = localDate.with(firstDayOfMonth()); System.out.println(date2); //下个月的第一天 LocalDate date3 = localDate.with(firstDayOfNextMonth()); System.out.println(date3); //明年的第一天 LocalDate date4 = localDate.with(firstDayOfNextYear()); System.out.println(date4); //当年的第一天 LocalDate date5 = localDate.with(firstDayOfYear()); System.out.println(date5); //本月第一个满足星期三的日期 LocalDate date6 =localDate.with(firstInMonth(DayOfWeek.WEDNESDAY)); System.out.println(date6); //今年的最后一天 LocalDate date7 = localDate.with(lastDayOfYear()); System.out.println(date7); //当月最后一个满足是星期四的日期 LocalDate date8 = localDate.with(lastInMonth(DayOfWeek.TUESDAY)); System.out.println(date8); //下个星期天的日期 LocalDate date9 = localDate.with(next(DayOfWeek.SUNDAY)); LocalDate date13 = localDate.with(nextOrSame(DayOfWeek.SUNDAY)); System.out.println(date9); System.out.println("localDate2==="+localDate); //上个星期天的日期 LocalDate date10 = localDate.with(previous(DayOfWeek.SUNDAY)); System.out.println(date10); LocalDate date11 = localDate.with(previousOrSame(DayOfWeek.SUNDAY)); System.out.println(date11); //上个星期三 LocalDate localDate1 = LocalDate.now(); LocalDate date12 = localDate1.with(previousOrSame(DayOfWeek.WEDNESDAY)); System.out.println(date12);
复制代码
1
2
3
4
5
6
7
8
9
10// 获取当前时间日期 ZonedDateTime date1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]"); System.out.println("date1: " + date1); ZoneId id = ZoneId.of("Europe/Paris"); System.out.println("ZoneId: " + id); ZoneId currentZone = ZoneId.systemDefault(); System.out.println("当期时区: " + currentZone);
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23LocalDateTime dt1 = LocalDateTime.of(2017, Month.APRIL,18,13,45,20); System.out.println(dt1); LocalDate date1 = dt1.toLocalDate(); //通过LocalDateTime获得LocalDate LocalTime time1 = dt1.toLocalTime(); //通过LocalDateTime获得LocalTime System.out.println("date1======="+date1+"time1===="+time1); LocalDate date = LocalDate.of(2014,02,26); LocalTime time = LocalTime.of(12,23,20); LocalDateTime dt2 = LocalDateTime.of(date,time); System.out.println(dt2); //LocalDate结合LocalTime成一个LocalDateTime LocalDateTime dt3 = date.atTime(13,45,20); System.out.println(dt3); //2014-02-26T13:45:20 //LocalDate结合LocalTime成一个LocalDateTime LocalDateTime dt4 = date.atTime(time); System.out.println(dt4); //2014-02-26T12:23:20 //LocalTime结合LocalDate成LocalDateTime LocalDateTime dt5 = time.atDate(date); System.out.println(dt5); //2014-02-26T12:23:20
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25Date date = new Date(); Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zoneId); //转换 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String format = localDateTime.format(dateTimeFormatter); System.out.println(format); LocalDate localDate1 = instant.atZone(zoneId).toLocalDate(); //转换 LocalTime localTime = instant.atZone(zoneId).toLocalTime(); //转换 LocalDateTime localDateTime1 = instant.atZone(zoneId).toLocalDateTime();//转换 String format2 = localDateTime1.format(dateTimeFormatter); System.out.println(format2); //-------------------------------------------------------------------------- LocalDateTime l = LocalDateTime.now(); ZonedDateTime zonedDateTime = l.atZone(zoneId); Date date1 = Date.from(zonedDateTime.toInstant()); LocalDate localDate = LocalDate.now(); ZonedDateTime zdt = localDate.atStartOfDay(zoneId); Date date2 = Date.from(zdt.toInstant());
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16LocalDate today = LocalDate.now(); // 取本月第1天: LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 取本月第2天: LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); // 取本月最后一天,再也不用计算是28,29,30还是31: LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); // 取下一天: LocalDate firstDayOf2015 = lastDayOfThisMonth.plusDays(1); // 取2015年1月第一个周一,这个计算用Calendar要死掉很多脑细胞: LocalDate firstMondayOf2015 = LocalDate.parse("2019-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2015-01-05 // 判断闰年 boolean isLeapYear = today.isLeapYear(); //判断该月天数 int days = today.lengthOfMonth();
这里说一下with(TemporalAdjusters temporalAdjusters ):
最后
以上就是丰富书本最近收集整理的关于java8日期类的全部内容,更多相关java8日期类内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复