java8 新增的操作时间和日期的类

在java8之前,操作日期和时间jdk提供了Date类和Calendar类,想想其操作就很头疼,及其不方便,所以项目里更多操作时间和日期的地方都要引入第三方jar包,joda-time就是很受欢迎的一个。 闲话少说,直接上代码。 如果想获取下一秒怎么办? 之前:

Date now = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.add(Calendar.SECOND, 1);
Date nextSecond = calendar.getTime();

之后:

LocalTime time = LocalTime.now();
LocalTime nextSecond = time.plusSeconds(1);

amazing?有没有? 不仅代码简洁了很多,而且也很容易理解,当前time就是用LocalTime.now();下一秒就是plusSeconds(1)即可;

再比如想获取今天12:30:56(即中午十二点三十分56秒)呢? 之前:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 12);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 56);
//calendar.set(2017,06,27,12,30,56);

可以小时,分钟,秒分别置给calendar对象,也可以使用下面注释的那行,不过必须还要传入日期(注意第二个参数month是从0开始的,7月就要传入6。。。),很麻烦 之后:

LocalTime time = LocalTime.of(12,30,56,0);

简单的发指。。(注意最后一个参数是nanoOfSecond,还有一个不传入此参数的方法)

当然 LocalTime类还提供了一些其他的静态属性和方法,比如 LocalTime提供的静态属性和静态方法 Collapse source

LocalTime MIDNIGHT; //午夜时分
LocalTime MIN;      //00:00一天的开始  同上方的午夜
LocalTime MAX;      //23:59:59.999999999  午夜前的最后一刻
LocalTime NOON;     //中午  12:00
 
long secondsOfDay = 3600;
LocalTime oneClock = LocalTime.ofSecondOfDay(secondsOfDay);  //返回当日某个秒数对应的对象,比如 3600 对应01:00
 
System.out.println("hour:"+oneClock.getHour()+"\tminutes:"+oneClock.getMinute());//getHour,getMinute,getSecond->返回对象对应的时分秒
 
LocalTime twoClock = oneClock.withHour(2);  //返回onclick对象是否小时维度是2,如果是,就返回,否则返回 小时是2,分表是onclock的分秒
 
System.out.println("02:00对应一天的第 " + twoClock.toSecondOfDay() + "秒");   //返回twoClock对应的秒数(7200)
 
System.out.println("2点和1点比较:\t" + twoClock.compareTo(oneClock));   //重写了compareTo方法,返回2个localtime大小比较,大于1,小于-1,等于0
 
System.out.println("1点是在2点之后吗?\t" + oneClock.isAfter(twoClock));     //返回2者前后比较(isBefore) 实际还是调用的compareTo方法
 
System.out.println("重写了equals方法:\t" + twoClock.equals(LocalTime.of(2,0))); //重写了equals方法
 
System.out.println("重写了toString方法:\t" + LocalTime.of(12,30,56).toString());  //重写了toString方法

打印结果如下: hour:1 minutes:0 02:00对应一天的第 7200秒 2点和1点比较: 1 1点是在2点之后吗? false 重写了equals方法: true 重写了toString方法: 12:30:56

还有一些没有深入研究的方法,比如parse,format等,有兴趣可以看看

当然,细心的童鞋发现了,怎么都是操作时间的,说好的日期呢? 并不是我不想一起写,而是因为jdk将time和date分开了,同上面的LocalTime,日期的操作在LocalDate类里,属性、方法和LocalTime大同小异,当然多了一些特殊的方法, 比如 LocalTime有 toSecondOfDay 返回对象在一天中对应的秒数, LocalDate中包含了getDayOfMonth(返回1-31),getDayOfYear(1-366),getDayOfWeek(1-7 monday是1) 还有一些其他的, 比如isLeapYear(是否是闰年) lenthOfMonth(当前对象,月的天数) 同理lenthOfYear(当前年的天数 365或366) 这些api真是方便的很,基本开发就够用了

是不是一会Date 一会Time的都绕糊涂了?没有?什么?你说为什么不能2个结合起来,我只能说,小明同学,你很有前途: 当当当当~jdk8 还有一个LocalDateTime类。。。行了,也不说了,用到了自己去查看api吧。。

其他说明:

新Date类和Time类背后的设计原则: 不可变类 java8之前,Date类都是可变类。当我们在多线程环境下使用它,编程人员应该确认Date对象的线程安全。Java8的Date和Time API提供了线程安全的不可变类。编程人员不用考虑并发的问题。 领域模型驱动设计方法 新的日期和时间的类别遵循“域驱动设计”。对于开发者来说,理解方法和类的功能是很容易的。 Java8中的date和time api是jodatime的作者参与开发的,实现了JSR310的全部内容。这些新的api都在包java.time下。

传一个time包下对应的类的图

输入图片说明

参考链接:java8 LocalDate LocalDateTime等时间类介绍

转载于:https://my.oschina.net/u/1417838/blog/1490564

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值