服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java第三方库JodaTime的具体使用

Java第三方库JodaTime的具体使用

2022-01-10 13:27shouheng Java教程

本文主要介绍了Java第三方库JodaTime的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Java8之前的时间库中存在一些设计不好的地方,导致用起来非常地不方便,又容易出错。比如,要实现在指定的日期的基础上面增加指定的时间的操作,你需要些大量的样板代码;而它的月份从0开始,稍有不慎就会掉入坑中。所以,通常我们使用第三方库Joda Time来进行时间相关的操作。

1、使用JodaTime

JodaTime在Github上面的主页:JodaTime
使用JodaTime的时候的两种配置方式:
在Maven中:

?
1
2
3
4
5
<dependency>
  <groupId>joda-time</groupId>
  <artifactId>joda-time</artifactId>
  <version>2.9.9</version>
</dependency>

在Gradle中:

?
1
compile 'joda-time:joda-time:2.9.9'

核心类
使用最多的五个日期时间类:
- Instant - 不可变的类,用来表示时间轴上一个瞬时的点(时间戳)
- DateTime - 不可变的类,用来替换JDK的Calendar类
LocalDate - 不可变的类,表示一个本地的日期,而不包含时间部分(没有时区信息)
- LocalTime - 不可变的类,表示一个本地的时间,而不包含日期部分(没有时区信息)
- LocalDateTime - 不可变的类,表示一个本地的日期-时间(没有时区信息)

2、获取DateTime实例

当使用JodaTime的时候,首先你要获取一个DateTime实例,然后用它的其他方法串联起来实现强大的功能。想要获取一个DateTime实例,你有很多种方式。下面列出常见的几种方式:

方式1:使用系统时间构造DateTime实例

?
1
DateTime dateTime = new DateTime();

方式2:使用具体的时间构造DateTime实例,该方法有许多重载版本

?
1
2
3
4
5
6
7
8
9
DateTime dateTime1 = new DateTime(
2000, // year
1,    // month
1,    // day
0,    // hour (midnight is zero)
0,    // minute
0,    // second
0     // milliseconds
);

方式3:使用Calendar构造DateTime实例

?
1
DateTime dateTime2 = new DateTime(Calendar.getInstance());

方式4:使用其他DateTime实例构造DateTime实例

?
1
DateTime dateTime3 = new DateTime(dateTime);

方式5:使用字符串构造DateTime实例

?
1
2
DateTime dateTime4 = new DateTime("2006-01-26T13:30:00-06:00");
DateTime dateTime5 = new DateTime("2006-01-26");

3、使用DateTime的方法

DateTime中有许多的方法,这里我们将常用的方法分成两类。一类是在方法中返回DateTime的那种,一类是在方法中返回Property类型的那种。显然,后面的那种继续串联操作的话,就需要调用Property的实例方法了。
这里,我们先给出DateTime中的第一类方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 指定的时间单位上面增加指定的值
DateTime dateTime0 = dateTime.plusDays(1);
System.out.println(dateTime0);
 
// 指定的时间单位上面减少指定的值
DateTime dateTime6 = dateTime.minusDays(1);
System.out.println(dateTime6);
 
// 除了增减日期还可以直接指定它的指定时间单位上面的值
DateTime dateTime7 = dateTime.withYear(2020);
System.out.println(dateTime7);
 
// 按照指定的格式输出日期
System.out.println(dateTime.toString("E MM/dd/yyyy HH:mm:ss.SSS"));

在上面的代码中,我们只给出了其中的一部分方法的实例。实际上,在DateTime内部有许多的方法,只是它们的原理基本类似。

上面的一些方法,如果涉及的时间发生了变化(具体是指时间对应的毫秒数发生了变化),就会调用DateTime实例的withMillis()方法。在该方法中,如果发现传入的毫秒数与当前的毫秒数不一样就会新建一个DateTime实例,并将其返回。所以,上面的plusDays(1)和minusDays(1)返回的DateTime实际上已经是另一个实例了。

4、使用Property的

可以通过DateTime实例的millisOfDay() dayOfYear() minuteOfDay()等一些列方法可以获取到该DateTime的一个Property实例,然后可以通过调用Property的方法再获取一个DateTime实例。也就是说,实际上调用DateTime的方法获取Property实例是为了对指定的时间位置的信息进行修改。比如,对“日”进行修改,对“年”进行修改等等。修改了之后还是要获取一个DateTime实例,然后再继续进行后续的操作。

实际上每次调用DateTime的方法获取Property实例的时候,都会将当前的DateTime作为参数传入。然后当调用了指定的方法之后又会调用DateTime实例的withMillis()方法判断时间是否发生变化,如果发生了变化就创建一个新实例并返回。

下面是它的一些示例:

?
1
2
3
4
5
// 这里先用dayOfMonth获取一个Property实例,然后调用它的withMaximumValue方法
// 它的含义是指定日期的其他日期不变,月份变成最大的之后返回一个DateTime,即如果传入的是2018年5月1日,将返回2018年5月31日,
// 年,月,秒等位置不变,日变成该月最大的。
DateTime dateTime0 = dateTime.dayOfMonth().withMaximumValue();
DateTime dateTime1 = dateTime.dayOfMonth().withMinimumValue();

5、其他的静态方法

除了上面的一些类之外,JodaTime还有许多的静态方法供我们使用。比如:

?
1
2
3
System.out.println(Days.daysBetween(dateTime1, dateTime).getDays());
System.out.println(Months.monthsBetween(dateTime1, dateTime).getMonths());
System.out.println(Years.yearsBetween(dateTime1, dateTime).getYears());

当然,这里我们只列出了对两个DateTime实例的“日” “月”和“年”单位的操作,还有许多类似的类可以用来对“毫秒”“秒”等操作。

结语

这里只是通过JodaTime的一些常用的方法的实例来说明其设计的基本原理,重点在于理清其中的逻辑,明白每个被串联的操作究竟做了什么。

相关代码:Java-advanced

到此这篇关于Java第三方库JodaTime的具体使用的文章就介绍到这了,更多相关Java JodaTime 内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/6844903608593416205

延伸 · 阅读

精彩推荐
  • Java教程java多线程详细总结

    java多线程详细总结

    以下小编就对java中的多线程进行了详细的总结分析,需要的朋友可以过来参考下,希望对大家有所帮助 ...

    java之家4552019-10-16
  • Java教程浅谈SSH框架中spring的原理

    浅谈SSH框架中spring的原理

    下面小编就为大家带来一篇浅谈SSH框架中spring的原理。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    jingxian1802020-07-27
  • Java教程实现java简单的线程池

    实现java简单的线程池

    这篇文章主要为大家详细介绍了java简单实现多线程,及java爬虫使用线程池实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    小胖java攻城狮6222021-10-11
  • Java教程Struts2学习笔记(1)-入门教程

    Struts2学习笔记(1)-入门教程

    本文是一个Struts2的简单入门教程,比较简单,希望能给大家做一个参考。 ...

    meaijojo5242020-05-14
  • Java教程Java编程探索之泛型擦除实例解析

    Java编程探索之泛型擦除实例解析

    这篇文章主要介绍了Java编程探索之泛型擦除实例解析,具有一定参考价值,需要的朋友可以了解下。...

    ysk_xh_52110482021-01-24
  • Java教程Java面试题冲刺第二十三天--分布式

    Java面试题冲刺第二十三天--分布式

    这篇文章主要为大家分享了最有价值的三道关于分布式的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们...

    _陈哈哈3752021-11-11
  • Java教程Maven本地缓存清理小工具的实现

    Maven本地缓存清理小工具的实现

    这篇文章主要介绍了Maven本地缓存清理小工具的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    xbynet5532021-05-06
  • Java教程Java接口操作(继承父类并实现多个接口)

    Java接口操作(继承父类并实现多个接口)

    这篇文章主要介绍了Java接口操作(继承父类并实现多个接口),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Valentino1123583062020-10-07