一, 时间日期类
Java 8 在 java.time 包下提供了很多新的 API. 以下为两个比较重要的 API:
Local(本地) − 简化了日期时间的处理, 没有时区的问题.
Zoned(时区) − 通过制定的时区处理日期时间.
二, 本地化时间日期 API
LocalDate,LocalTime 和 LocalDateTime 类可以处理没有时区问题的情况
获取本地时间
- LocalDate localDate = LocalDate.now();
- LocalDateTime localDateTime = LocalDateTime.now();
- LocalTime localTime = LocalTime.now();
- System.out.println(localDate);
- System.out.println(localDateTime);
- System.out.println(localTime);
- // 输出: 2018-11-03
- //2018-11-03T11:48:53.609
- //11:48:53.609
对时间的操作
- LocalDateTime localDateTime = LocalDateTime.now();
- // 增加 5 年
- LocalDateTime localDateTime1 = localDateTime.plusYears(5);
- System.out.println(localDateTime1);
- // 减少 4 个月
- LocalDateTime localDateTime2 = localDateTime.minusMonths(4);
- System.out.println(localDateTime2);
- // 获取月份
- int monthValue = localDateTime.getMonthValue();
- System.out.println(monthValue);
- // 获取周
- DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
- System.out.println(dayOfWeek);
- // 获取年份
- int year = localDateTime.getYear();
- System.out.println(year);
- //2023-11-03T15:10:52.405
- //2018-07-03T15:10:52.405
- //11
- //SATURDAY
- //2018
计算间隔
Duration: 计算两个时间之间的间隔
- LocalDateTime localDateTime = LocalDateTime.now();
- Thread.sleep(500);
- LocalDateTime localDateTime1 = LocalDateTime.now();
- Duration duration = Duration.between(localDateTime,localDateTime1);
- System.out.println(duration.toMillis());
- // 输出: 505
Period: 计算两个日期之间的间隔
- LocalDate localDate = LocalDate.now();
- LocalDate localDate1 = LocalDate.of(2008,8,8);
- Period period = Period.between(localDate1,localDate);
- System.out.println(period.getYears()+":"+period.getMonths()+":"+period.getDays());
- // 输出: 10:2:26
格式化时间或日期
- DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-mm-dd:hh:mm:ss");
- LocalDateTime localDateTime = LocalDateTime.now();
- String format = dateTimeFormatter.format(localDateTime);
- System.out.println(format);
- // 输出: 2018-44-03:03:44:22
三, 使用时区的时间日期 API
- // 获取时区为 Europe/Paris 的时间
- LocalDateTime localDateTime = LocalDateTime.now(ZoneId.of("Europe/Paris"));
- System.out.println(localDateTime);
- // 组合一个带有时区的日期
- ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Europe/Paris"));
- System.out.println(zonedDateTime);
- // 获取当前时区
- ZoneId zoneId = ZoneId.systemDefault();
- System.out.println(zoneId);
- // 输出: 2018-11-03T08:51:34.629
- //2018-11-03T08:51:34.629+01:00[Europe/Paris]
- //Asia/Shanghai
来源: http://www.jianshu.com/p/a873bbed8981