为什么需要在Java8中引入新的日期和时间库?
- 在java1.0中,对时间和日期的支持只能依赖 java.util.date 类,但这个类无法表示日期,只能以毫秒的精度表示时间,易用性也较低。
Date date = new Date(114,2,18); //打印结果 Tue Mar 18 00:00:00 CST 2014
- 在java1.1中,同时存在Date和Calendar类,增加了程序员的选择困惑,并且月份是从0开始
- DateFormate类只支持Date类
LocalDate:提供简单的日期,不包含时间信息
//创建一个不可变的日期对象 LocalDate date = LocalDate.now(); //返回当前日期 LocalDate date = LocalDate.of(2014,3,18); //返回一个指定日期 LocalDate date = LocalDate.parse("2014-03-18"); //解析字符串,生成一个LocalDate对象 ... //获取日期时间的方法 int year = date.getYear(); //获取年 getDayOfMonth(); //获取月中的日 getMonth(); //获取月份 getDayOfWeek(); //获取星期 lengthOfMonth(); //获取月份的天数 isLeapYear(); //是否是周年 ... //操作LocalDate方法(一部分) withYear(int year); //设置年 withDayOfMonth(int day); //设置日 with(ChronoFiled.MONTH_OF_YEAR,int month); //设置月份 plusWeek(int week); //添加周数 minusYears(int year); //减去year年 plus(int month,ChronoUnit.MONTHS); //修改月份 ... //比较的方法 isEqual(); //是否相等 isBefore(); //是否先于 isAfter(); //是否后于
LocalTime:提供简单的时间,不包含日期信息
//创建一个时间对象 LocalTime time = LocalTime.now(); //当前时间 LocalTime time = LocalTime.of(13,23,46); //自定义时间 LocalTime time = LocalTime.parse("13:23:46"); //解析时间 ... //获取时间的方法 getHour(); //获取小时 getMinute(); //分 getSecond(); //秒 ... //操作时间的方法 plusHour(); //小时 plusMinute(); //操作分钟 plusSecond(); //秒 ... //比较的方法 isEqual(); //是否相等 isBefore(); //是否先于 isAfter(); //是否后于 ``
LocalDateTime:整合了LocalDate和LocalTime
//创建日期时间对象 LocalDateTime dateTime = LocalDateTime.now(); //当前啊日期时间 LocalDateTime dateTime = LocalDateTime.of(LocalDate.now,LocalTime.now); //指定日期时间 LocalDateTime dateTime = LocalDateTime.parse("2018-08-08 08:08:08"); //解析时间 //获取日期时间的方法 getYear(); //获取年 getDayOfMonth(); //获取月中的日 getMonth(); //获取月份 getDayOfWeek(); //获取星期 getHour(); //获取小时 getMinute(); //分 getSecond(); //秒 ... //操作日期时间的方法 withYear(int year); //设置年 withDayOfMonth(int day); //设置日 with(ChronoFiled.MONTH_OF_YEAR,int month); //设置月份 plusHour(); //小时 plusMinute(); //操作分钟 plusSecond(); //秒 ... //比较的方法 isEqual(); //是否相等 isBefore(); //是否先于 isAfter(); //是否后于 ``
Duration:用于计算两个LocalTime或两个LocalDateTime之间的时间差; Peroid用于计算两个LocalDate之间的差值
Duration duration = Duration.between(LocalTime.of(12,12,12),LocalTime.now()); long second = duration.getSeconds(); //时间差 Peroid peroid = Peroid.between(LocalDate.now(),LocalDate.now()); int month = peroid.getMonth(); //getDay(),getYear() 时间差值
时间戳:Instance
Instant now = Instant.now();
总结
新的时间API提供了时间的比较,计算等类,极大的简化了时间开发。