Java使用JodaTime处理时间

摘要:
简介在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的库。在这里记录下使用方法,方便日后参考。

简介

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

引入Maven依赖

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

核心类

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

DateTime的使用

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

1 DateTime dt = new DateTime();

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

1 DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, intminuteOfHour)
2 DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, intsecondOfMinute)
3 DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute, intmillisOfSecond)
4 DateTime(longinstant)
5 DateTime(Object instant)

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

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

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

1 getCenturyOfEra() 返回世纪单位(int) 
2 getYearOfCentury() 返回世纪年份(int) 
3 getYear() 返回年(int) 
4 getWeekyear() 返回对应年中周数(int) 
5 getMonthOfYear() 返回对应年的月数(int) 
6 getDayOfYear() 返回对应年中天数(int) 
7 getDayOfMonth() 返回对应月份中天数(int) 
8 getDayOfWeek() 返回对应星期中天数(int) 
9 getHourOfDay() 返回对应天中的小时(int) 
10 getMinuteOfDay() 返回对应天中的分钟数(int) 
11 getMinuteOfHour() 返回对应小时中的分钟数(int) 
12 getSecondOfDay() 返回对应天中的秒数(int) 
13 getSecondOfMinute() 返回对应分钟中的秒数(int) 
14 getMillis() 返回毫秒数(int) 
15 getMillisOfDay() 返回对应天中的毫秒(int) 
16 getMillisOfSecond() 返回对应秒中的毫秒(int) 
17 getHourOfDay() 返回对应天中的小时(int) 
18 toString(String pattern) 返回一个规定格式的String
19 
20 //demo
21 //y:年,M:月,d:日,H:时,m:分,s:秒,E:星期
22 DateTime now =DateTime.now();
23 System.out.println(now.toString("yyyy/MM/dd HH:mm:ss EE"));

DateTime中的常用方法

1 1. plus/minus开头的方法(比如:plusDay, minusMonths):用来返回在DateTime实例上增加或减少一段时间后的实例 
2 plus(longduration) 增加指定毫秒数并返回 
3 plusYears(intyears) 增加指定年份并返回 
4 plusMonths(intmonths) 增加指定月份并返回 
5 plusWeeks(intweeks) 增加指定星期并返回 
6 plusDays(intdays) 增加指定天数并返回 
7 plusHours(inthours) 增加指定小时并返回 
8 plusMinutes(intminutes) 增加指定分钟并返回 
9 plusSeconds(intseconds) 增加指定秒数并返回 
10 plusMillis(int millis) 增加指定毫秒并返回 -与之相反的是minus前缀的 plus是增加 minus是减少 
11 
12 2. with开头的方法:用来返回在DateTime实例更新指定日期单位后的实例 
13 withCenturyOfEra(intcenturyOfEra) 更新时间世纪单位并返回 
14 withYearOfCentury(intyearOfCentury)更新世纪年并返回 
15 withYear(intyear) 更新时间年并返回 
16 withWeekyear(intweekyear) 更新时间周数并返回 
17 withMonthOfYear(intmonthOfYear)更新时间月份并返回 
18 withDayOfYear(intdayOfYear) 更新时间天数并返回 
19 withDayOfMonth(intdayOfMonth) 更新时间天数并返回 
20 withDayOfWeek(intdayOfWeek) 更新时间天数并返回 
21 withHourOfDay(inthour) 更新时间小时并返回 
22 withMinuteOfHour(intminute) 更新时间分钟并返回 
23 withSecondOfMinute(intsecond) 更新时间秒数并返回 
24 withMillisOfSecond(intmillis) 更新时间毫秒并返回 
25 withMillisOfDay(intmillis) 更新时间毫秒并返回 
26 withTimeAtStartOfDay() 获取当天最早时间 
27 
28 3. 判断DateTime对象大小状态的一些操作方法 
29 compareTo(DateTime d) 比较两时间大小 时间大于指定时间返回 1 时间小于指定时间返回-1相等返回0 
30 equals(DateTime d) 比较两时间是否相等 
31 isAfter(longinstant) 判断时间是否大于指定时间 
32 isAfterNow() 判断时间是否大于当前时间 
33 isBefore(longinstant) 判断时间是否小于指定时间 
34 isBeforeNow() 判断时间是否小于当前时间 
35 isEqual(longinstant) 判断时间是否等于指定时间 
36 isEqualNow() 判断时间是否等于当前时间 
37 
38 4. jdk date互转 
39 DateTime dt = new DateTime(newDate()); jdk的date转换为DateTime 
40 Date jdkDate = dt.toDate() 转换为jdk的date

LocalDate的使用

LocalDate只处理年月日

默认构造器

1 LocalDate(int year, int monthOfYear, intdayOfMonth)
2 LocalDate(long instant)

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

其他拓展方法

1 daysBetween(ReadableInstant start, ReadableInstant end)     获取两日期相差的天数
2 hoursBetween(ReadableInstant start, ReadableInstant end)    获取两日期相差的小时数
3 minutesBetween(ReadableInstant start, ReadableInstant end)  获取两日期相差的分钟数
4 monthsBetween(ReadableInstant start, ReadableInstant end)   获取两日期相差的月数
5 secondsBetween(ReadableInstant start, ReadableInstant end)  获取两日期相差的秒数
6 weeksBetween(ReadableInstant start, ReadableInstant end)    获取两日期相差的周数
7 yearsBetween(ReadableInstant start, ReadableInstant end)    获取两日期相差的年数
8 
9 //demo
10 LocalDate start = newLocalDate(); 
11 LocalDate end = new LocalDate().minusDays(1);
12 System.out.println(Days.daysBetween(start,end).getDays());

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

免责声明:文章转载自《Java使用JodaTime处理时间》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JavaScript单元测试工具-Jest[家里蹲大学数学杂志]第328期詹兴致矩阵论习题参考解答下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

DBeaver下载驱动文件失败

今天,当DBeaver软件首次用于链接数据库时,驱动程序文件将被下载,如下图所示:上图显示下载驱动程序文件失败,并提示“无法解决库文件,请检查网络设置”。到目前为止,我们可以使用DBeaver正常操作数据。...

【NS-3学习】ns3-模拟基础:关键概念,日志,命令行参数

前言本博客首先介绍了模拟过程中使用的一些关键概念,然后介绍了有助于调试模拟脚本的常见技术:日志、命令行参数。Ns-3不是一个特殊的互联网模拟器,而是一个网络模拟器。在ns-3的仿真环境中,节点可以连接到表示数据交换通道的对象。这里,基本通信子网的抽象概念被称为信道,由C++中的channel类描述。在ns-3中,网络设备的抽象概念相当于硬件设备和软件驱动程序...

Notepad++正则表达式查找替换文本中文字符

测试需求测试工具中xml配置文件中的注释字段包含中文字符。Win10系统中使用的工具中偶尔会出现中文乱码,导致配置文件无效。解决方案是将配置文件中的中文注释替换为英文注释,或者直接替换和删除。如何查找和删除配置文件中的汉字?“记事本”中使用正则表达式[^x00 xff]来匹配汉字。替换完成如下3。所有汉字已被替换。...

WPF 制作圆角按钮

在程序对应坐置插入以下代码,或是先拖一个按钮控件到窗体中,再替换对应的代码。...

nginx配置跨域(CORS)、防盗链(valid_referers)、缓存(expires)、压缩(gzip)

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服AJAX只能同源使用的限制。服务器根据这个值,在许可范围内,则在头信息包含Access-Control-Allow-Origin。...

sqlite3 数据类型 批量插入

SQLite3采用动态数据类型。存储值的数据类型与值本身相关,而不是由其字段类型决定。SQLite3的动态数据类型可以向后兼容其他数据库常用的静态类型,这意味着在使用静态数据类型的数据库中使用的数据表也可以在SQLite3中使用。在SQLite2数据库中,除了声明为主键的INTEGER列外,任何列都可以存储属于任何存储类型的值。...