csdn上阅读体验不够好,可以去这里看.
- java.time 包下有5 个大包
- java.time 包含值对象的基础包
- java.time.chrono 提供对不同的日历系统的访问
- java.time.format 格式化和解析时间和日期
- java.time.temporal 包括底层框架和扩展特性
- java.time.zone 包含时区支持的类
- 所有的类都是不可变的/线程安全的
- LocalDateTime: 只存储了日期和时间, 如2017-03-21T14:02:43.455。(后面的.455表示毫秒值的最后三位,使用.withNano(0)可把毫秒值设为0)
- LocalDate: 只存储了日期, 如: 2017-03-21。
- LocalTime: 只存储了时间, 如:14:02:43.455。(后面的.455表示毫秒值的最后三位,使用.withNano(0)可把毫秒值设为0)
- Year: 只表示年份 Month:只表示月份 YearMonth:只表示月日DayOfWeek:只存储星期的一天
- Instant 相当于java.util的Date Clock: 它通过指定一个时区, 然后就可以获取到当前的时刻,日期与时间. Clock可以替换System.currentTimeMillis() 与 TimeZone.getDefault().
- ZoneDateTime 可以得到特定时区的日期/时间
- Duration 是用来计算两个日期的时间差
- java.time.format.DateTimeFormatter
- 模板属性是和SimpleDateFormat是一样的
- SimpleDateFormat与DateTimeFormatter的区别
- 日期转字符串
- SimpleDateFormat
//使用Date和SimpleDateFormat SimpleDateFormat simpleDateFormat = new SimpleDateFormat("G yyyy年MM月dd号 E a hh时mm分ss秒"); String format = simpleDateFormat.format(new Date()); System.out.println(format); //打印: 公元 2017年03月21号 星期二 下午 06时38分20秒 - DateTimeFormatter
//使用jdk1.8 LocalDateTime和DateTimeFormatter LocalDateTime now = LocalDateTime.now(); DateTimeFormatter pattern = DateTimeFormatter.ofPattern("G yyyy年MM月dd号 E a hh时mm分ss秒"); String format = now.format(pattern); System.out.println(format); //打印: 公元 2017年03月21号 星期二 下午 06时38分20秒
- SimpleDateFormat
- 字符串转日期
- SimpleDateFormat
/使用Date和SimpleDateFormat SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = simpleDateFormat.parse("2017-12-03 10:15:30"); System.out.println(simpleDateFormat.format(date)); //打印 2017-12-03 10:15:30 - DateTimeFormatter
/使用jdk1.8 LocalDateTime和DateTimeFormatter DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //严格按照ISO yyyy-MM-dd验证,03写成3都不行 LocalDateTime dt = LocalDateTime.parse("2017-12-03 10:15:30",pattern); System.out.println(dt.format(pattern));
- SimpleDateFormat
- 日期转字符串
- LocalDateTime和Date相互转换
- Date to LocalDateTime
Date todayDate = new Date();LocalDateTime ldt = todayDate.toInstant() .atZone( ZoneId.systemDefault() ) .toLocalDateTime();System.out.println(ldt);//2019-05-16T19:22:12.773 - LocalDateTime to Date
LocalDateTime localDateTime = LocalDateTime.now();Date date = Date.from( localDateTime.atZone( ZoneId.systemDefault()).toInstant());System.out.println(date);//Thu May 16 19:22:37 CST 2019
- Date to LocalDateTime
- 获取当前日期
- //2019-06-19
- LocalDate nowLocalDate=LocalDate.now();
- DateTimeFormatter formatter=DataTimeFormatter.ofPattern("yyyy-MM-dd");
- String nowString = nowLocalDate.format(formatter);
- 获取当前时间
- //10:03:22.237
- LocalTime localTime = LocalTime.now();
- DateTimeFormatter formatter=DateTimeFormatter.ofPattern("HH:mm:ss");
- String stringTime=localTime.format(formatter);
- 获取当前日期和时间
- LocalDateTime localDateTime = LocalDateTime.now();
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- String dateTime=LocalDateTime.now().format(formatter); //2019-06-19 10:06:05
- String dateTime=LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); //2019-06-19T10:37:07.407
- 自定义时间(LocalDate)
- LocalTime localTime=LocalTime.parse("10:09:20");
- LocalDate localDate=LocalDate.parse("2019-06-19");
- LocalDateTime localDateTime=LocalDateTime.parse("2019-06-19T10:09:30");
- 计算两个日期的时间差
- long day=LocalDate.now().toEpocDay(); //18066 获取从1970年以来的天数
- long day=LocalDate.now().toEpocDay()- LocalDate.parse("2017-12-01").toEpocDay(); //获取两个时间的天数差
- 判断日期的先后
- isBefore isAfter
- 自定义模板当使用不存在的字段时
- DateTimeFormatter formatter = new DateTimeFormatterBuilder()
- .appendPattern(“yyyyMM”)
- .parseDefaulting(ChronoField.DAY_OF_MONTH,1)
- .toFormatter();
- LocalDate localDate = LocalDate.parse(date,formatter);