博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
廖雪峰Java7处理日期和时间-3java.time的API-1LocalDateTime
阅读量:4321 次
发布时间:2019-06-06

本文共 4562 字,大约阅读时间需要 15 分钟。

1.java.time提供了新的日期和时间API:

  • LocalDate/LocalTime/LocalDateTime
  • ZoneDateTime/ZoneId
  • Instant
  • Formatter

新API特点:

  • 严格区分日期、时间
  • 所有的类均为不变类(类似String)
  • 修复了Month范围1-12(Jan~Dec)
  • Week范围1-7(Mon~Sun)

2.LocalDate/LocalTime/LocalDateTime

  • LocalDate:本地日期
  • LocalTime:本地时间
  • LocalDateTime:本地日期+时间
public static void main(String[] args) {        //获取当前日期时间        LocalDate d = LocalDate.now();//获取当前日期        LocalTime t = LocalTime.now();//当去当前时间        LocalDateTime dt = LocalDateTime.now();//获取当前日期和时间        //Local严格按照ISO 8601格式打印        System.out.println(d+"\t"+t+"\t"+dt);        //指定日期时间        LocalDate d2 = LocalDate.of(2016,11,30);//构造LocalDate对象,月份不再减1,即11是11月,不是12月        LocalTime t2 = LocalTime.of(15,16,17);//构造LocalTime对象        LocalDateTime dt2 = LocalDateTime.of(2016,11,30,15,16,17);//构造LocalDateTime对象        LocalDateTime dt3 = LocalDateTime.of(d2,t2);//根据LocalDate和LocalTime对象构造LocalDateTime对象        System.out.println(d2+"\t"+t2+"\t\t"+dt2);    }

1418970-20190410215122249-1806432643.png

2.1DateTimeFormatter是不可变类

public static void main(String[] args) {        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");        System.out.println(dtf.format(LocalDateTime.now()));        System.out.println(LocalDateTime.now().format(dtf));        LocalDateTime dt2 = LocalDateTime.parse("2019-04-11 19:27:18",dtf);        System.out.println(dt2);    }

1418970-20190411193006414-1866402977.png

3.parse将字符串解析为日期时间

默认是按照ISO标准格式进行解析的。如果传入的标准格式的日期、时间,可以自动解析。

  • yyyy-MM-dd
  • HH:mm:ss
  • HH:mm:ss:SSS
  • yyyy-MM-dd'T'HH:mm:ss
  • yyyy-MM-dd'T'HH:mm:ss.SSS
public static void main(String[] args) {        LocalDate d1 = LocalDate.parse("2001-05-06");        System.out.println(d1);        LocalTime t1 = LocalTime.parse("15:16:17");        System.out.println(t1);        LocalTime t2 = LocalTime.parse("15:16:17.99");        System.out.println(t2);        LocalDateTime dt1 = LocalDateTime.parse("2016-11-30T15:16:17");        System.out.println(dt1);        LocalDateTime dt2 = LocalDateTime.parse("2016-11-30T15:16:17.333");        System.out.println(dt2);    }

1418970-20190411194209288-1178853593.png

4.日期和时间运算

4.1对日期和时间进行加减

  • plusDays()
  • minusHours()
  • plusWeeks()
public static void main(String[] args) {        LocalDate today = LocalDate.now();        LocalDate after5days = today.plusDays(5);//加5天        System.out.println(today+"\t"+after5days);        LocalTime now = LocalTime.now();        LocalTime before2hours = now.minusHours(2);//减2小时        System.out.println(now+"\t"+before2hours);        LocalDate d = today.plusYears(1).plusMonths(1).plusWeeks(1).plusDays(1);//1年1月1周又1天后        System.out.println(today+"\t"+d);    }

1418970-20190411195716696-371876859.png

4.2使用with调整日期时间

  • withDayOfMonth()
  • withMonth()
  • withHours()
  • with()
LocalDate firstday = LocalDate.now().withDayOfMonth(1);//本月第一天        System.out.println(firstday);        LocalTime at = LocalTime.now().withSecond(0).withNano(0);//将秒和纳秒调整为0        System.out.println(at);        LocalDate lastday = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());//本月最后1天        System.out.println(lastday);        LocalDate firstSunday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY));//本月第一个周日        System.out.println(firstday);    }

1418970-20190411201630347-54622484.png

4.3判断日期和时间先后

  • isBefore()
  • isAfter()
  • equals()
public static void main(String[] args) {        LocalDate d1 = LocalDate.of(2016,11,20);        LocalDate d2 = LocalDate.of(2016,11,21);        System.out.println(d1.isBefore(d2));        System.out.println(d1.isAfter(d2));        System.out.println(d1.equals(d2));    }

1418970-20190411201907267-397793938.png

4.4Period计算2个时期相差多少

  • getYears()
  • getMonths()
  • getDays()
public static void main(String[] args) {        LocalDate d1 = LocalDate.of(2016,11,20);        LocalDate d2 = LocalDate.of(2050,1,1);        Period p = d1.until(d2);        System.out.println(p);//P33Y1M12D ,即相差33年1月12天        System.out.println("年"+p.getYears()+"月"+p.getMonths()+"日"+p.getDays());        System.out.println((d2.toEpochDay()-d1.toEpochDay())+"天");    }

1418970-20190411204405528-1906694149.png

示例:

代码1:

public static void main(String[] args) {        LocalDate d1 = LocalDate.now();        System.out.println(d1);        System.out.println("week="+d1.getDayOfWeek().getValue());//打印周几        LocalDate d2 = LocalDate.of(2016,11,30);        LocalTime t2 = LocalTime.of(15,16,17);        LocalDateTime dt2 = LocalDateTime.of(d2,t2);        System.out.println(dt2);    }

<img src="" />

5.总结:

LocalDate、LocalTime和LocalDateTime:

  • 不变类(类似String)
  • 默认按ISO 8601标准格式化和解析
  • 使用DateTimeFormatter自定义格式化和解析
  • 使用plusDays()/minusHours()等方法对日期和时间进行加减、返回新对象
  • 使用withDayOfMonth()/with()等方法调整日期和时间,返回新对象
  • 使用isBefore()/isAfter()/equals()判断日期和时间的先后

注意:LocalDateTime无法与long进行转换:

  • 因为LocalDateTime没有时区,无法确定某一时刻
  • ZonedDateTime有时区,可以与long进行转换

转载于:https://www.cnblogs.com/csj2018/p/10691739.html

你可能感兴趣的文章
MongoDB 3.4 高可用集群搭建(二)replica set 副本集
查看>>
一个一线城市的IT白领的生活成本:3万/年
查看>>
ubuntu12.04 使用Adobe Reader PDF
查看>>
吃货联盟订餐系统(二)
查看>>
MessageBox 用法
查看>>
Developing school contest 2
查看>>
本文来自CSDN博客 map
查看>>
python 字符串中替换字符
查看>>
mysql命令行编辑模式
查看>>
《实践与思考》系列连载(6)——IT从业人员工作环境及状态调查 抽奖结果公布...
查看>>
hihocoder 1643 Puzzle Game(北京icpc2017 现场赛)
查看>>
vim 简单理解三种模式 粗暴入门
查看>>
django模板层之静态文件引入优化
查看>>
转载使用命令wsimport构建WebService客户端
查看>>
java实现23种设计模式之模版方法模式
查看>>
小程序·云开发实战 - 校园约拍小程序
查看>>
闲话函数式变成与OOP
查看>>
Linux-正则表达式与三剑客
查看>>
php中,post与get获取参数的异同
查看>>
警惕!年轻人要拥抱自动化和人工智能作为通信的未来
查看>>