转自: https://blog.csdn.net/psh18513234633/article/details/79408096

简介

在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对象
now()                                           返回获取当前DateTime
parse(String str, DateTimeFormatter formatter)  返回指定String值的DateTime> parse demo
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime d3 = DateTime.parse("2016-10-10 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

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
  • ​​Property

除了基本get方法之外,jodatime为每一个时间类创建一个内部静态类,叫Property,便于访问实例中的各个字段,使Joda Time功能更加丰富。

它相当于 Java对象的属性。属性是根据所表示的常见结构命名的,并且它被用于访问这个结构,用于完成计算目的。

jodatime 包含的property有:

centuryOfEra()
yearOfCentury()
yearOfEra()
year()
weekyear()
weekOfWeekyear()
monthOfYear()
dayOfYear()
dayOfMonth()
dayOfWeek()
hourOfDay()
minuteOfDay()
minuteOfHour()
secondOfDay()
secondOfMinute()
millisOfDay()
millisOfSecond()

简单的举例

DateTime dt = new DateTime();
String monthStr = dt.monthOfYear().getAsText();     --> 十二月
int year = dt.monthOfYear().getAsText();            --> 2017
DateTime dtyear20 = dt.year().addToCopy(20);        --> 20年后的时间

方法

addToCopy(int value)            日期属性增加value并返回datetime
setCopy(int value)              日期属性替换成value并返回datetime
withMaximumValue()              返回日期属性最大值的datetime
withMinimumValue()              返回日期属性最小值的datetime
roundFloorCopy()                返回日期属性最小值的datetime
roundCeilingCopy()              返回日期属性最大值的datetime
get()                           返回日期属性值int类型
getAsString()                   返回日期属性值String类型
getAsShortText()                返回日期属性值String类型简写
getAsText()                     返回日期本地属性值String类型,如“星期五”
isLeap()                        判断是闰年闰月的方法
getMaximumValue                 获取属性值的最大值返回int
getMinimumValue                 获取属性值的最小值返回int
  • LocalDate的使用

LocalDate只处理年月日

默认构造器

LocalDate() ld = new 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());

使用Joda DateTime处理时间相关推荐

  1. mybatis处理joda datetime

    mybatis处理joda datetime 首先写一个处理DateTime的TypeHandler @MappedTypes(DateTime.class)public class DateTime ...

  2. joda dateTime简单用法

    我们在编写应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个时间点之间的路径.使用 JDK 完成这项任务将非常痛苦和繁琐.joda-dateTime 可以 ...

  3. 听说你不会用datetime处理时间?

    在日常工作中基本每天都会与时间类型打交道,比如数据库每条数据的创建时间,更新的时候需要写入的更新时间,那么问题来了,如下: 它是要 UTC Time(世界统一时间)还是要本地时间? 日期的格式要怎么格 ...

  4. Joda DateTime常用方法

    1.将字符串转换为时间 DateTimeFormatter forPattern = DateTimeFormat.forPattern("yyyy-MM-dd"); DateTi ...

  5. joda jar日期处理类的学习

    转载:http://www.open-open.com/lib/view/open1348032952724.html 任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点, ...

  6. joda DateTimeFormatter simpleDateFormat

    转自:  https://www.ibm.com/developerworks/cn/java/j-jodatime.html 今天看到一个大牛说道simpleDateFormat不是线程安全的,要换 ...

  7. Joda - 日期时间

    一.Joda-Time 介绍 任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个 时间点之间的路径.使用 JDK 完成这项任务将非常痛苦和繁琐. ...

  8. python datetime库_python datetime库使用代码详解

    python 如何将字符串转化为datetime.date心总是在最痛时,复苏:爱总是在最深时,落下帷幕. 比较省事的办法是用time模块的strptime方法来解析日期字符串成为时间对象,然后再把年 ...

  9. Java 项目还需要 joda 吗

    因为众所周知的原因,老的 Java 中的日期处理是非常不好用但是又不得不用的 API. 而且经常混乱还容易出错,相信大家应该都用过救民于水火的 joda Datetime 对象吧,简直是活菩萨. 时间 ...

最新文章

  1. python语言是什么时候诞生的_python诞生于什么时候
  2. presonus studio one 5中文版
  3. python switch_从邮箱验证小项目说python字符串判断与if判断那些事儿
  4. 推荐一位BAT数据大神!(附联系方式)
  5. Chrome 对于 glyphicon 字体图标不显示的解决办法
  6. html5动画是什么,10个HTML5动画 让你忘掉Flash是啥(组图)
  7. [css] 你会经常用到伪元素吗?一般都用在哪方面?
  8. 只考计算机知识吗,计算机二级只考一门吗?计算机二级考什么?
  9. web前端中的命名规则
  10. python爬虫之路——对斗破苍穹进行关键字提取,制作噪声云图
  11. forever不重启 node_利用forever确保nodejs在后台运行,不会down掉
  12. 强烈推荐大家看这篇文章:iOS开发常用三方库、插件、知名博客等等(特别有用)
  13. JS函数传参、作用域
  14. 联合国可持续发展目标,中国大数据服务支持
  15. nas设备在通用服务器的基础上对文件服务,NAS网络存储设备将取代文件服务器
  16. 至强服务器系列,2020 最新 至强 Xeon 服务器系列 CPU天梯图
  17. 奇妙的裴波那契数列和黄金分割
  18. 99行拓扑优化matlab程序解读,99行拓扑优化 代码解析
  19. 《科学》:基因编辑婴儿入选年度“科学崩坏”事件
  20. Python Str字符串 字符串常用方法 定义 创建 拆分 成分判断 大小写调整 格式化 填充 替换 访问 查找

热门文章

  1. 加拿大访问学者家属如何办理携签?
  2. SC-LEGO-LOAM 扩展以及深度解析
  3. 信息论与编码matlab实验报告,信息论与编码实验程序与结果图(matlab)
  4. unity下基于贴图混合(Texture Blending)的自定义妆容方案
  5. grasshopper butterfly插件报错
  6. 计算机系统结构 cpi,计算机系统结构作业答案第一章(张晨曦)
  7. Centos7 yum安装mysql(完整版)
  8. openWrt下的vlan划分
  9. mysql高并发秒杀_高并发秒杀解决方案(转载)
  10. 我是如何失去团队掌控的?