JAVA8新特性 - 时间API
2017-11-25 14:25
555 查看
前言
JAVA8的新特性之一就是DATE/TIME的改善,之前的时间API确实不够好用,JAVA8借鉴了Joda-Time的精华对旧的API进行了改善和升级API,正好最近工作中常常使用到时间,简单的记录一下java时间API的用法,不涉及非常高深的东西.结构介绍
![](http://of8rkrh1w.bkt.clouddn.com/time-of-java8.png)
LocalTime
LocalTime 顾名思义就是介绍具体的时间的类.创建时间对象
// current time 11:34:53.201 LocalTime currentTime = LocalTime.now(); //of重载了多个方法,可以根据自己的需求选择合适的方法 // 12:00 LocalTime midday = LocalTime.of(12, 0); // 13:10:15 LocalTime afterMidday = LocalTime.of(13, 10, 15); // 10:00:01 LocalTime fromSecondsOfDay = LocalTime.ofSecondOfDay(36001);
获取时间的某一部分
接下来看一下如何通过LocalTime 对象获取具体的时分秒//11 int hour = currentTime.getHour(); //34 int minute = currentTime.getMinute(); //53 int second = currentTime.getSecond(); //733 int nano = currentTime.getNano();
另外补充
withXXX方法为通过改变当前时间的时或分或秒生成新时间
plusXXX方法为在当前时间对象的基础上加多少小时或者多少分钟或者多少秒生成新时间
minusXXX方法则为在当前时间对象的基础上减多少小时或者多少分钟或者多少秒生成新时间
格式化时间
//格式化时间 11:34:53.201 String basic = currentTime.format(DateTimeFormatter.ISO_LOCAL_TIME); //12:00:00 String middayFormat = midday.format(DateTimeFormatter.ISO_LOCAL_TIME); //自定义格式化时间 11:34:53 String custom = currentTime.format(DateTimeFormatter.ofPattern("HH:mm:ss")); //解析时间 LocalTime basicTime = LocalTime.parse(basic); //12:00 LocalTime middayParse = LocalTime.parse(middayFormat); //自定义格式解析时间 LocalTime customTime = LocalTime.parse(custom, DateTimeFormatter.ofPattern("HH:mm:ss"));
我们不需要关系DateTimeFormatter只需要关心我们格式化和解析的格式就可以了,中间还添加不完整格式的时间进行格式化.
LocalDate
LocalDate顾名思义就是本地日期的类,用来专门处理日期相关的操作创建日期
// the current date LocalDate currentDate = LocalDate.now(); // 2017-11-25 LocalDate day1 = LocalDate.of(2017, Month.NOVEMBER, 25); // 2014-05-11 LocalDate day2 = LocalDate.of(2014, 5, 11); // 2010的第65天 LocalDate day3 = LocalDate.ofYearDay(2010, 65); //1970-01-02 从1970的第一天加1天 LocalDate epochDay = LocalDate.ofEpochDay(1);
修改日期
会生成新的日期,本演示结果省略day1.withYear(1993);//修改年份并创建日期 day1.withMonth(3); //会自动更新天数越界的问题 day1.withDayOfYear(23);//年份不变,改为当前年的第23天 day1.withDayOfMonth(3);//当前月的第三天 day1.plusDays(3); //当前日期加3天 day1.plusYears(3); //加3年 day1.plusWeeks(3); //加3周 day1.plusMonths(3); //加三个月
获取日期
//=============================获取日期================================ int year = day1.getYear();//获取年份 Month month = day1.getMonth(); //获取月份 --为枚举类 int dayOfYear = day1.getDayOfYear(); //当前年的多少天 int dayOfMonth = day1.getDayOfMonth(); //当前月的多少天 DayOfWeek dayOfWeek = day1.getDayOfWeek(); //当前周的第几天 --枚举类
格式化日期
和格式化时间类似String format = day1.format(DateTimeFormatter.ISO_LOCAL_DATE); String customDate = day1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); LocalDate parse = LocalDate.parse(format); LocalDate.parse(customDate,DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDateTime
顾名思义就是具体的日期+时间的类,可以理解为localDate和localTime的结合体.创建时间
// 当前日期+时间 LocalDateTime currentDateTime = LocalDateTime.now(); // 2017-10-12 12:30 LocalDateTime localDateTime1 = LocalDateTime.of(2017, 10, 12, 12, 30); // 2014-11-4 12:10:05 LocalDateTime localDateTime2 = LocalDateTime.of(2014, Month.NOVEMBER, 4, 12, 10,5); //日期+时间拼接 LocalDateTime localDateTime3= LocalDateTime.of(currentDate, currentTime);
其他
也有和LocalDate和LocalTime类似的getXXX方法,包括年月日时分秒
withXXX方法,更改局部生成新对象,包括年月日时分秒
plusXXX方法,在当前的基础上加一定的时间
minusXXX方法,当前时间基础上减一定的时间
format和parse方法格式化对象
汇总
1.compareTo,isBefore,isAfter方法比较两个对象的大小,三种类都有
2.三者的转换
//通过localDateTime获取localDate LocalDate localDate = currentDateTime.toLocalDate(); //通过localDateTime获取localTime LocalTime localTime = currentDateTime.toLocalTime(); //通过localTime+localDate生产localDateTime LocalDateTime localDateTime4 = localDate.atTime(localTime); LocalDateTime localDateTime5 = localTime.atDate(localDate);
TimeZone
时区的时间操作,将本地时间转化为对应时区的时间ZoneId类 记录时区信息和转换时区的操作
ZonedDateTime berlinDateTime = ZonedDateTime.of(dateTime, ZoneId.of("Europe/Berlin"));
TIMESTAMP
时间戳,在JAVA8中使用Instant作为时间戳类//当前时间戳 Instant now = Instant.now(); // 1262334567秒转化为时间戳 Instant.ofEpochSecond(1262334567); //时间戳转成毫秒的数字 long toEpochMillis = now.toEpochMilli();
他也有和localTime相类似的plus,minus,compareTo方法.
TimeStamp,Instant,Date的装换
Date date = Date.from(now); Instant instant = date.toInstant(); Timestamp timestamp = Timestamp.from(now); Instant instant1 = timestamp.toInstant();
结语
就简单的介绍到这里,当然java.time包下面还有很多其他的内容,可以自行去学习和研究使用.总之JAVA的time包极大的便利我们的日常对时间的需要!!!!与君共勉!!!
相关文章推荐
- Java 8 新特性:Java 类库的新特性之日期时间API (Date/Time API )
- Java8新特性9--新的日期和时间API
- Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API
- 详解Java8特性之新的日期时间 API
- Java8新特性之:新的日期和时间API
- Java8新特性整理之新的时间和日期API(终章)
- Java 8新特性 全新的日期时间API
- java8,你应该了解的新特性(新时间与日期API)
- java 8 新特性 时间api使用实例
- Java8新特性(三)——Optional类、接口方法与新时间日期API
- Java 8新特性之新的时间日期API
- 详解Java8特性之新的日期时间 API
- Java 8 新特性:Java 类库的新特性之日期时间API (Date/Time API )
- Java 8新特性(四):新的时间和日期API
- Java8新特性-014-传统时间API的线程安全问题
- W3Cschool Java 8新特性----> 日期时间 API
- Java8新特性——时间API
- Java8新特性5--流式API
- Java 8新的日期与时间API
- Java 8新特性:Stream API