JAVA8新特性

来源:互联网 发布:淘宝评价完怎么不显示 编辑:程序博客网 时间:2024/06/03 20:28

前言

JAVA8的新特性之一就是DATE/TIME的改善,之前的时间API确实不够好用,JAVA8借鉴了Joda-Time的精华对旧的API进行了改善和升级API,正好最近工作中常常使用到时间,做一个使用的总结.

结构介绍

今天主要介绍常用的时间类和格式化相关的功能.

LocalTime

localTime顾名思义就是介绍具体的时间的类.

创建时间对象

// current time 11:34:53.201LocalTime currentTime = LocalTime.now();//of重载了多个方法,可以根据自己的需求选择合适的方法// 12:00LocalTime midday = LocalTime.of(12, 0); // 13:10:15LocalTime afterMidday = LocalTime.of(13, 10, 15);// 10:00:01LocalTime fromSecondsOfDay = LocalTime.ofSecondOfDay(36001);

获取时间的某一部分

接下来看一下如何通过localTime对象获取具体的时分秒

//11int hour = currentTime.getHour();//34int minute = currentTime.getMinute();//53int second = currentTime.getSecond();//733int nano = currentTime.getNano();

另外补充

  1. withXXX方法为通过改变当前时间的时或分或秒生成新时间
  2. plusXXX方法为在当前时间对象的基础上加多少小时或者多少分钟或者多少秒生成新时间
  3. minusXXX方法则为在当前时间对象的基础上减多少小时或者多少分钟或者多少秒生成新时间

格式化时间

//格式化时间 11:34:53.201String basic = currentTime.format(DateTimeFormatter.ISO_LOCAL_TIME);//12:00:00String middayFormat = midday.format(DateTimeFormatter.ISO_LOCAL_TIME);//自定义格式化时间 11:34:53String custom = currentTime.format(DateTimeFormatter.ofPattern("HH:mm:ss"));//解析时间LocalTime basicTime = LocalTime.parse(basic);//12:00LocalTime middayParse = LocalTime.parse(middayFormat);//自定义格式解析时间LocalTime customTime = LocalTime.parse(custom, DateTimeFormatter.ofPattern("HH:mm:ss"));

我们不需要关系DateTimeFormatter只需要关心我们格式化和解析的格式就可以了,中间还添加不完整格式的时间进行格式化.

LolcalDate

LocalDate顾名思义就是本地日期的类,用来专门处理日期相关的操作

创建日期

// the current dateLocalDate currentDate = LocalDate.now();// 2017-11-25LocalDate day1 = LocalDate.of(2017, Month.NOVEMBER, 25);// 2014-05-11LocalDate 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:30LocalDateTime localDateTime1 = LocalDateTime.of(2017, 10, 12, 12, 30);// 2014-11-4 12:10:05LocalDateTime localDateTime2 = LocalDateTime.of(2014, Month.NOVEMBER, 4, 12, 10,5);//日期+时间拼接LocalDateTime localDateTime3= LocalDateTime.of(currentDate, currentTime);

其他

也有和LocalDate和LocalTime类似的

  1. getXXX方法,包括年月日时分秒
  2. withXXX方法,更改局部生成新对象,包括年月日时分秒
  3. plusXXX方法,在当前的基础上加一定的时间
  4. minusXXX方法,当前时间基础上减一定的时间
  5. format和parse方法格式化对象

汇总

1.compareTo,isBefore,isAfter方法

比较两个对象的大小,三种类都有

2.三者的转换

//通过localDateTime获取localDateLocalDate localDate = currentDateTime.toLocalDate();//通过localDateTime获取localTimeLocalTime localTime = currentDateTime.toLocalTime();//通过localTime+localDate生产localDateTimeLocalDateTime 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包极大的便利我们的日常对时间的需要!!!!

与君共勉!!!

原创粉丝点击