JDK1.8新增的时间日期API
2018-01-27 23:01
656 查看
[b]JDK1.8 新增的日期时间API[/b]
[b]LocalDate、 LocalTime、 LocalDateTime类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。注: ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法[/b]
这些新增的日期时间API都在 java.time包下
[b]获取对象的方法[/b]
[b]方式1通过静态方法 now();[/b]
[b]例如:LocalDateTimeldt = LocalDateTime.now();[/b]
[b]方式2通过静态方法of()方法参数可以指定年月日时分秒[/b]
[b]例如:LocalDateTimeof = LocalDateTime.of(2018, 12, 30, 20, 20, 20);[/b]
[b]常用方法[/b]
[b]1.与获取相关的方法:get系类的方法[/b]
l[b]dt.getYear();获取年[/b][b]ldt.getMinute();获取分钟[/b]
[b]ldt.getHour();获取小时[/b]
[b]getDayOfMonth 获得月份天数(1-31)getDayOfYear 获得年份天数(1-366)getDayOfWeek 获得星期几(返回一个 DayOfWeek枚举值)getMonth 获得月份, 返回一个 Month 枚举值getMonthValue 获得月份(1-12)getYear 获得年份[/b]
[b]2.格式化日期日期字符串的方法 format()[/b]
例如:String yyyy = ldt.format(DateTimeFormatter.ofPattern("yyyy"));[b]3.转换的方法 toLocalDate();toLocalTime();[/b]
例如:LocalDate localDate = ldt.toLocalDate();例如:LocalTime localTime = ldt.toLocalTime();
[b]4.判断的方法[/b]
[b]isAfter()判断一个日期是否在指定日期之后[/b][b]isBefore()判断一个日期是否在指定日期之前[/b]
[b] isLeapYear()判断是否是闰年注意是LocalDate类中的方法[/b]
例如: boolean after = ldt.isAfter(LocalDateTime.of(2024, 1, 1, 2, 3));
例如 boolean b= LocalDate.now().isLeapYear();
[b]5.解析的静态方法parse("2007-12-03T10:15:30");[/b]
[b]paser() 将一个日期字符串解析成日期对象,注意字符串日期的写法的格式要正确,否则解析失败[/b]
例如:LocalDateTime parse = LocalDateTime.parse("2007-12-03T10:15:30");[b] [/b]
按照我们指定的格式去解析:
[b]//按照我们指定的格式去解析[/b]
注意细节:如果用LocalDateTime 想按照我们的自定义的格式去解析,注意
日期字符串的
年月日时分秒要写全,不然就报错
[b]LocalDateTime
ldt4 = LocalDateTime.now();[/b]
[b]DateTimeFormatter
formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");[/b]
[b]LocalDateTime.parse("2018-01-21
20:30:36", formatter2);[/b]
[b] [/b]
[b]6.添加年月日时分秒的方法 plus系列的方法 都会返回一个新的LocalDateTime的对象[/b]
[b][b] LocalDateTime localDateTime= ldt.plusYears(1);[/b][/b]
[b][b] LocalDateTime localDateTime1 = ldt.plusMonths(3);[/b][/b]
[b][b] LocalDateTime localDateTime2=ldt.plusHours(10);[/b][/b]
[b]7.减去年月日时分秒的方法 minus 系列的方法 注意都会返回一个新的LocalDateTime的对象[/b]
例如:LocalDateTime localDateTime2 = ldt.minusYears(8);
[b]8.指定年月日时分秒的方法 with系列的方法[/b]
例如 LocalDateTime localDateTime3 = ldt.withYear(1998);
[b]Instant 时间戳类[/b]从1970-01-01
00:00:00 截止到当前时间的毫秒值
[b]1获取对象的方法 now()[/b]
[b]注意默认获取出来的是当前的美国时间和我们相差八个小时[/b]
[b] Instant ins = Instant.now();[/b]
[b] System.out.println(ins);[/b]
我们在东八区
所以可以加8个小时 就是我们的北京时间
[b]2. Instant中设置偏移量的方法:atOffset()
设置偏移量[/b]
[b] OffsetDateTime time
= ins.atOffset(ZoneOffset.ofHours(8));[/b]
[b] System.out.println(time);[/b]
[b]3.获取系统默认时区时间的方法atZone()[/b]
[b][b]方法的参数是要一个时区的编号可以通过时区编号类获取出来[/b][/b][b][b]ZoneId.systemDefault()获取本地的默认时区ID[/b][/b]
[b][b] ZonedDateTime zonedDateTime = ins.atZone(ZoneId.systemDefault());[/b][/b]
[b] System.out.println(zonedDateTime);[/b]
[b]4.get系列的方法[/b]
[b]getEpochSecond() 获取从1970-01-01 00:00:00到当前时间的秒值[/b]
[b]getNano()方法是把获取到的当前时间的秒数 换算成纳秒[/b]
l[b]ong epochSecond = ins.getEpochSecond();//获取从1970-01-0100:00:00到当前时间的秒值[/b]
[b]//getNano()方法是把获取到的当前时间的秒数 换算成纳秒 比如当前时间是2018-01-01 14:00:20:30[/b]
[b] //那就把30秒换算成纳秒 int nano = ins.getNano();[/b]
[b]5. ofEpochSecond()方法 给计算机元年增加秒数[/b]
例如 Instant instant = Instant.ofEpochSecond(5);
[b] System.out.println(instant);[/b]
-------------------------------------------------------------------------------Duration :
[b]用于计算两个“时间”间隔的类[/b]
Period :
[b]用于计算两个“日期”间隔的类[/b]
[b]Duration类中静态方法between()[/b]
[b]Instant start = Instant.now();[/b]
[b] for(int i=0;i<1000L;i++){[/b]
[b] System.out.println("循环内容");[/b]
[b] }[/b]
[b] Instant end = Instant.now();[/b]
静态方法:between() 计算两个时间的间隔,默认是秒
[b]Duration between = Durati’on.between(start, end);[/b][b]Duration中的toMillis()方法:将秒转成毫秒[/b]
[b]System.out.println(between.toMillis());[/b]
[b]Period类
中的静态方法between()[/b]
[b]计算两个日期之间的间隔[/b]
[b] LocalDate s = LocalDate.of(1985, 03, 05);[/b]
[b] LocalDate now = LocalDate.now();[/b]
[b] Period be = Period.between(s, now);[/b]
[b] System.out.println(be.getYears());//间隔了多少年[/b]
[b] System.out.println(be.getMonths());//间隔了多少月[/b]
[b] System.out.println(be.getDays());//间隔多少天[/b]
[b]TemporalAdjuster : 时间校正器,是个接口,[/b]
一般我们用该接口的一个实现类 TemporalAdjusters中的一些常量,来指定日期
例如:
[b]LocalDate now = LocalDate.now();[/b]
[b] System.out.println(now);[/b]
[b]1 //使用TemporalAdjusters自带的常量来设置日期[/b]
[b] LocalDate with = now.with(TemporalAdjusters.lastDayOfYear());[/b]
[b] System.out.println(with);[/b]
[b]2 //采用TemporalAdjusters中的next方法来指定日期[/b]
[b] LocalDate date = now.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));[/b]
[b] System.out.println(date);[/b]
[b]3 //采用自定义的方式来指定日期 比如指定下个工作日[/b]
[b] LocalDateTime ldt = LocalDateTime.now();[/b]
[b] LocalDateTime workDay = ldt.with(new TemporalAdjuster() {[/b]
[b] @Override[/b]
[b] public Temporal adjustInto(Temporal temporal) {[/b]
[b] //向下转型[/b]
[b] LocalDateTime ld = (LocalDateTime) temporal;[/b]
[b] //获取这周的星期几[/b]
[b] DayOfWeek dayOfWeek = ld.getDayOfWeek();[/b]
[b] if (dayOfWeek.equals(DayOfWeek.FRIDAY)) {[/b]
[b] return ld.plusDays(3);//如果这天是星期五,那下个工做日就加3天[/b]
[b] } else if (dayOfWeek.equals(DayOfWeek.SATURDAY)) {[/b]
[b] return ld.plusDays(2);//如果这天是星期六,那下个工做日就加2天[/b]
[b] } else {[/b]
[b] //其他就加一天[/b]
[b] return ld.plusDays(1);[/b]
[b] }[/b]
[b] }[/b]
[b] });[/b]
[b] [/b]
[b] System.out.println(workDay);[/b]
[b]DateTimeFormatter :解析和格式化日期或时间的类[/b]
1. [b]获取对象的方式,通过静态方法ofPattern("yyyy-MM-dd");[/b]
[b]DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");[/b][b] LocalDateTime now = LocalDateTime.now();[/b]
[b]2.format()方法把一个日期对象的默认格式 格式化成指定的格式[/b]
[b]String format1 = dateFormat.format(now);[/b][b] System.out.println(format1);[/b]
[b]3格式化日期 方式2使用日期类中的format方法 传入一个日期格式化类对象[/b]
[b] [/b]
[b]LocalDateTime now1 = LocalDateTime.now();[/b]
使用日期类中的format方法 传入一个日期格式化类对象
使用DateTimeFormatter中提供好的日期格式常量
[b] [/b][b]now1.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);[/b]
[b]4.使用自定义的日期格式格式化字符串[/b]
[b][b]DateTimeFormatter timeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//自定义一个日期格式[/b][/b][b][b] String time = now1.format(timeFormat);[/b][/b]
[b][b] System.out.println(time);[/b][/b]
[b] [/b]
[b]5. 把一个日期字符串转成日期对象[/b]
使用日期类中的parse方法传入一个日期字符串,传入对应的日期格式化类
[b][b]DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");[/b][/b][b][b]LocalDateTime parse = LocalDateTime.parse(time, timeFormat);[/b][/b]
[b][b] System.out.println(parse);[/b][/b]
----------------------------------------------------------------------------------------------------------------------------------------------------------
[b]ZonedDate,ZonedTime、ZonedDateTime : 带时区的时间或日期[/b]
[b] ZoneID 世界时区类[/b]
1. [b]获取世界各个地方的时区的集合
的方法getAvailableZoneIds()[/b]
使用ZoneID中的静态方法getAvailableZoneIds();来获取
例如:Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
[b]2.获取系统默认时区的ID[/b]
[b] ZoneId zoneId = ZoneId.systemDefault(); //Asia/Shanghai[/b]
2. [b]获取带有时区的日期时间对象[/b]
[b]//创建日期对象LocalDateTime now = LocalDateTime.now();//获取不同国家的日期时间根据各个地区的时区ID名创建对象ZoneId timeID = ZoneId.of("Asia/Shanghai");//根据时区ID获取带有时区的日期时间对象ZonedDateTime time = now.atZone(timeID);System.out.println(time);//方式2 通过时区ID 获取日期对象LocalDateTime now2 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));System.out.println(now2);[/b]相关文章推荐
- [置顶] JDK 日期&时间<Date Time> API
- jdk1.8日期时间组件
- 关于jdk中API取出的日期和本地系统时间不一致的解决
- JDK新增的日期API
- 如何在JDK1.8中愉快地处理日期和时间
- JDK1.7和JDK1.8中日期时间使用和处理的不同
- Java8中新增的日期和时间API
- jdk1.8 日期新API LocalDateTime,LocalDate,LocalTime 在Hibernate中无法反序列化解决方法
- JDK1.8新增的时间日期API
- JDK8新特性(4):日期时间 API
- Java8:新的日期和时间API
- 使用Java 8 的日期和时间Api
- java8_api_日期时间
- Java 8 新增日期,时间包
- [转]JavaSE 8—新的时间和日期API
- java8 JDK1.8 API 中文 翻译版 java帮助文档
- Java8新特性之:新的日期和时间API
- W3Cschool Java 8新特性----> 日期时间 API
- Java 8时间和日期API 20例
- JDK 1.8 API 下载 英文