简介

在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的库。在这里记录下使用方法,方便日后参考。
api 官网 http://www.joda.org/joda-time/apidocs/index.html?overview-summary.html

引入Maven依赖

 <dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>

核心类

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

DateTime的使用

DateTime 是JodaTime的核心类,代表时间日期值,其构造方法多样,即可以使用各种对象构造,亦可以使用基本类型构造,核心在于能够确定在时间轴上的位置。。默认构造器如下所示

 DateTime dt = new DateTime();

其他构造函数,可使用不同的构造函数快速获取DateTime对象

 DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour)
DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute)
DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute, int millisOfSecond)
DateTime(long instant)
DateTime(Object instant)

还有一种方法就是使用静态方法来获取DateTime对象

 // 获取当前的DateTime
DateTime now = DateTime.now(); // 获取指定String值的DateTime
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime d3 = DateTime.parse("2019-03-09 11:12:55", formatter);

DateTime中的常用属性值获取方法

 getCenturyOfEra() 返回世纪单位(int)
getYearOfCentury() 返回世纪年份(int)
getYear() 返回年(int)
getWeekyear() 返回对应年中周数(int)
getMonthOfYear() 返回对应年的月数(int)
getDayOfYear() 返回对应年中天数(int)
getDayOfMonth() 返回对应月份中天数(int)
getDayOfWeek() 返回对应星期中天数(int)
getHourOfDay() 返回对应天中的小时(int)
getMinuteOfDay() 返回对应天中的分钟数(int)
getMinuteOfHour() 返回对应小时中的分钟数(int)
getSecondOfDay() 返回对应天中的秒数(int)
getSecondOfMinute() 返回对应分钟中的秒数(int)
getMillis() 返回毫秒数(int)
getMillisOfDay() 返回对应天中的毫秒(int)
getMillisOfSecond() 返回对应秒中的毫秒(int)
getHourOfDay() 返回对应天中的小时(int)
toString(String pattern) 返回一个规定格式的String // demo
// y:年,M:月,d:日,H:时,m:分,s:秒,E:星期
DateTime now = DateTime.now();
System.out.println(now.toString("yyyy/MM/dd HH:mm:ss EE"));

DateTime中的常用方法

 1. plus/minus开头的方法(比如:plusDay, minusMonths):用来返回在DateTime实例上增加或减少一段时间后的实例
plus(long duration) 增加指定毫秒数并返回
plusYears(int years) 增加指定年份并返回
plusMonths(int months) 增加指定月份并返回
plusWeeks(int weeks) 增加指定星期并返回
plusDays(int days) 增加指定天数并返回
plusHours(int hours) 增加指定小时并返回
plusMinutes(int minutes) 增加指定分钟并返回
plusSeconds(int seconds) 增加指定秒数并返回
plusMillis(int millis) 增加指定毫秒并返回 -与之相反的是minus前缀的 plus是增加 minus是减少 2. with开头的方法:用来返回在DateTime实例更新指定日期单位后的实例
withCenturyOfEra(int centuryOfEra) 更新时间世纪单位并返回
withYearOfCentury(int yearOfCentury)更新世纪年并返回
withYear(int year) 更新时间年并返回
withWeekyear(int weekyear) 更新时间周数并返回
withMonthOfYear(int monthOfYear)更新时间月份并返回
withDayOfYear(int dayOfYear) 更新时间天数并返回
withDayOfMonth(int dayOfMonth) 更新时间天数并返回
withDayOfWeek(int dayOfWeek) 更新时间天数并返回
withHourOfDay(int hour) 更新时间小时并返回
withMinuteOfHour(int minute) 更新时间分钟并返回
withSecondOfMinute(int second) 更新时间秒数并返回
withMillisOfSecond(int millis) 更新时间毫秒并返回
withMillisOfDay(int millis) 更新时间毫秒并返回
withTimeAtStartOfDay() 获取当天最早时间 3. 判断DateTime对象大小状态的一些操作方法
compareTo(DateTime d) 比较两时间大小 时间大于指定时间返回 1 时间小于指定时间返回-1 相等返回0
equals(DateTime d) 比较两时间是否相等
isAfter(long instant) 判断时间是否大于指定时间
isAfterNow() 判断时间是否大于当前时间
isBefore(long instant) 判断时间是否小于指定时间
isBeforeNow() 判断时间是否小于当前时间
isEqual(long instant) 判断时间是否等于指定时间
isEqualNow() 判断时间是否等于当前时间 4. jdk date互转
DateTime dt = new DateTime(new Date()); jdk的date转换为DateTime
Date jdkDate = dt.toDate() 转换为jdk的date

LocalDate的使用

LocalDate只处理年月日

默认构造器

 LocalDate(int year, int monthOfYear, int dayOfMonth)
LocalDate(long instant)

方法跟DateTime方法类似,就不单独整理了,可以去api查看详细方法

其他拓展方法

 daysBetween(ReadableInstant start, ReadableInstant end)     获取两日期相差的天数
hoursBetween(ReadableInstant start, ReadableInstant end) 获取两日期相差的小时数
minutesBetween(ReadableInstant start, ReadableInstant end) 获取两日期相差的分钟数
monthsBetween(ReadableInstant start, ReadableInstant end) 获取两日期相差的月数
secondsBetween(ReadableInstant start, ReadableInstant end) 获取两日期相差的秒数
weeksBetween(ReadableInstant start, ReadableInstant end) 获取两日期相差的周数
yearsBetween(ReadableInstant start, ReadableInstant end) 获取两日期相差的年数 // demo
LocalDate start = new LocalDate();
LocalDate end = new LocalDate().minusDays(1);
System.out.println(Days.daysBetween(start,end).getDays());

参考:https://blog.csdn.net/psh18513234633/article/details/79408096

Java使用JodaTime处理时间的更多相关文章

  1. java笔记--问题总结

    1. 垃圾回收算法 标记-清除算法 标记-清除算法是最基本的算法,和他的名字一样,分为两个步骤,一个步骤是标记需要回收的对象.在标记完成后统一回收被标记的对象.这个算法两个问题.一个是效率问题,标记和 ...

  2. java后端研发经典面试题总结

    垃圾回收算法 1.标记-清除算法 标记-清除算法是最基本的算法,和他的名字一样,分为两个步骤,一个步骤是标记需要回收的对象.在标记完成后统一回收被标记的对象.这个算法两个问题.一个是效率问题,标记和清 ...

  3. 20145222黄亚奇《Java程序设计》第7周学习总结

    教材学习内容总结 第十三章 时间与日期 即使标注为GMT(格林威治时间),实际上谈到的的是UTC(Unix时间)时间. 秒的单位定义时基于TAI.也就是铯原子辐射的振动次数. Unix时间是1970年 ...

  4. Java 8新特性前瞻

    快端午小长假了,要上线的项目差不多完结了,终于有时间可以坐下来写篇博客了. 这是篇对我看到的java 8新特性的一些总结,也是自己学习过程的总结. 几乎可以说java 8是目前为止,自2004年jav ...

  5. 20155208徐子涵 2016-2017-2 《Java程序设计》第7周学习总结

    20155208徐子涵 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十三章 时间与日期 13.1 认识时间与日期 就目前来说,即使标注为GMT(无论是文 ...

  6. Java 两个日期间的天数计算

    在Java中计算两个日期间的天数,大致有2种方法:一是使用原生JDK进行计算,在JDK8中提供了更为直接和完善的方法:二是使用第三方库. 1.使用原生的JDK private static long  ...

  7. 【私人向】Java复习笔记

    此笔记学习于慕课网:Java入门第一季-第三季,想学的可以点击链接进行学习,笔记仅为私人收藏 建议学习时间:2-3天(极速版) 数据类型 基本数据类型存的是数据本身 引用类型变量(class.inte ...

  8. 20145216史婧瑶《Java程序设计》第7周学习总结

    20145216 <Java程序设计>第7周学习总结 教材学习内容总结 第十三章 时间与日期 13.1 认识时间与日期 就目前来说,即使标注为GMT(无论是文件说明,或者是API的日期时间 ...

  9. springcloud中config启动时候报错Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'config.info' in value "${config.info}"

    -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dcom.sun.management.jm ...

随机推荐

  1. MyBatis基本配置和实践(二)

    一.前言 从上一篇文章的junit单元测试环节可以看到,每一次调用MyBatis需要先加载SqlMapConfig.xml文件,再通过SqlSessionFactoryBuilder创建SqlSess ...

  2. Oracle replace()函数

    往Oracle 中导入数据时,有一个列导入的数据应该时‘2017-04-17’ 的格式,结果导入的数据为 ‘2017/04/17’格式的,1000多条记录要一条条改基本不可能. 于是想到了replac ...

  3. html5\CSS3有哪些新特性、移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?

    (1)HTML5现在已经不是SGML的子集,主要是关于图像,位置,存储,地理定位等功能的增加. 绘画canvas元素: 用于媒介回放的video和audio元素: 本地离线存储localStorage ...

  4. SQLServer2008或SQLServer2008 R2没有智能提示解决方法

    如果没有智能提示,需要安装SqlcompletefreeSQL Server智能提示

  5. 入门级 - 码云(Gitee),GitHub 教程

    这篇文章的目的是记录我的关于GitHub的内容,从注册.下载直到设置成功每一步都有解释,其中有一些截图或者代码来自于网络. GitHub和码云均基于Git,所以两者的操作方法基本一致,只需要学习其中一 ...

  6. Linxu下 expect的实用实例_1

    案例 例1:从本机自动登录到远程机器192.168.1.200(端口是22,密码是:PASSWORD)登录到远程机器后做以下几个操作:1)useradd wangshibo2)mkdir /opt/t ...

  7. Linux watch命令详解

    watch可以帮你监测一个命令的运行结果,来监测你想要的一切命令的结果变化 常见命令参数 Usage: watch [-dhntv] [--differences[=cumulative]] [--h ...

  8. 乘风破浪:LeetCode真题_006_ZigZag Conversion

    乘风破浪:LeetCode真题_006_ZigZag Conversion 一.前言 到这里我们对基本的问题有了一定的理解,其中字符串的操作一直是一个比较困难的问题,这一点我们需要认真对待,采用合理的 ...

  9. 沉淀,再出发:python中的pandas包

    沉淀,再出发:python中的pandas包 一.前言 python中有很多的包,正是因为这些包工具才使得python能够如此强大,无论是在数据处理还是在web开发,python都发挥着重要的作用,下 ...

  10. 定义类、System.Object对象、构造函数与析构函数、抽象类与静态类

    一.类定义 class MyClass { //类成员 } 1.访问级别 默认访问级别为internal(内部类),也可以是public(公共类) internal(内部类):当前项目中的代码才能访问 ...