Java8 Time包幕布笔记

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
            /使用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));
  • 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
  • 获取当前日期
    • //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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值