处理时间的场景在软件开发中很常见,JDK提供了Date和Calendar,然而这套API并不是很好用。这里推荐使用JodaTime来进行时间的处理。这里放上JodaTime的官网地址:https://www.joda.org/joda-time/
Maven中央库中的依赖:
<!-- https://mvnrepository.com/artifact/joda-time/joda-time --> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.9</version> </dependency>
在官网中,我们大概看看它的包结构,会有如下介绍:
大的功能划分基本在这个包结构中就能看出端倪。
整个JodaTime核心类是DateTime,它是不可变的线程安全的,代表一个datetime类。有多种构造方法,如图所示:
与jdk中常用的Date可以使用如下转换,用得比较多:
DateTime dateTime = new DateTime(new Date().getTime());
//Instance代表一个时间点,可以获取到Long型的时间戳 Date date = new Date(DateTime.now().toInstant().getMillis());
获取到DateTime之后,可以进行plus或者minus操作,来获取未来一个时间点的DateTime或者过去某个时间点的DateTime。几个比较有代表性的方法示例:
//注意格式 DateTime parse = DateTime.parse("2020-12-21T01:23:21"); //获取当前的时间对象 DateTime dateTime = DateTime.now(); //加1年 dateTime.plusYears(1); //倒退21天 dateTime.minusDays(21);
另外,还可以获取到某个时间点是一个周期里的第几个单位,如:
//获取当前的时间对象 DateTime dateTime = DateTime.now(); //获取今天是这个月的第几天 int dayOfMonth = dateTime.dayOfMonth().get(); //获取现在是今天的第几个小时 int hourOfDay = dateTime.hourOfDay().get(); //获取现在这个小时的第几分钟 int minuteOfHour = dateTime.minuteOfHour().get();
其它用法参考API中的详细文档。