Java第三方库JodaTime的具体使用

目录
  • 1、使用JodaTime
  • 2、获取DateTime实例
  • 3、使用DateTime的方法
  • 4、使用Property的
  • 5、其他的静态方法
  • 结语

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

1、使用JodaTime

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

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

在Gradle中:

compile 'joda-time:joda-time:2.9.9'

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

2、获取DateTime实例

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

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

DateTime dateTime = new DateTime();

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

DateTime dateTime1 = new DateTime(
2000, // year
1,    // month
1,    // day
0,    // hour (midnight is zero)
0,    // minute
0,    // second
0     // milliseconds
);

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

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

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

DateTime dateTime3 = new DateTime(dateTime);

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

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中的第一类方法。

// 指定的时间单位上面增加指定的值
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()方法判断时间是否发生变化,如果发生了变化就创建一个新实例并返回。

下面是它的一些示例:

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

5、其他的静态方法

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

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 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java中joda日期格式化工具的使用示例

    1.基本介绍 Java自带日期格式化工具DateFormat ,但是DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat 限制在 ThreadLocal 中.如果你不这么做,在解析或者格式化日期的时候,可能会获取到一个不正确的结果.因此,从日期.时间处理的所有实践来说,我强力推荐使用joda-time 库. 2.joda-time的使用 引入依赖 <de

  • Java第三方库JodaTime的具体使用

    目录 1.使用JodaTime 2.获取DateTime实例 3.使用DateTime的方法 4.使用Property的 5.其他的静态方法 结语 Java8之前的时间库中存在一些设计不好的地方,导致用起来非常地不方便,又容易出错.比如,要实现在指定的日期的基础上面增加指定的时间的操作,你需要些大量的样板代码:而它的月份从0开始,稍有不慎就会掉入坑中.所以,通常我们使用第三方库Joda Time来进行时间相关的操作. 1.使用JodaTime JodaTime在Github上面的主页:JodaT

  • Python标准库与第三方库详解

    本文详细罗列并说明了Python的标准库与第三方库如下,供对此有需要的朋友进行参考: Tkinter---- Python默认的图形界面接口. Tkinter是一个和Tk接口的模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组.Tcl/Tk是由John Ousterhout发展的书写和图形设备.Tcl(工具命令语言)是个宏语言,用于简化shell下复杂程序的开发,Tk工具包是和Tcl一起开发的, 目的是为了简化用户接口的设计过程.Tk工具包由许多不同的小部件,如一

  • 利用prop-types第三方库对组件的props中的变量进行类型检测

    1.引言--JavaScript就是一个熊孩子 1.1对于JSer们来说,js是自由的,但同时又有许多让人烦恼的地方.javascript很多时候就是这么一个熊孩子,他很多时候并不会像C和java这些"好孩子"那样循规蹈矩.因此给我们带来许多烦恼 <1>运行时候控制台报错:uncaught error,这尤其令人恼火的是系统告诉我们有错误但是又不告诉我们错误发生在哪里.试想一下,你到一个地方旅游迷了路,一个当地的熊孩子一直笑嘻嘻地跟在你后头告诉你:"你走错啦!&q

  • Go日常开发常用第三方库和工具介绍

    这里我主要将这些库分为两类: 业务开发 基础工具开发 业务开发 首先是业务开发,主要包含了 web.数据库.Redis 等. Gin ️️️️️ 首先是 Gin,一款 HTTP 框架,使用简单.性能优秀.资料众多:你还在犹豫选择哪款框架时,那就选择它吧,基本没错. 当然和它配套的 github.com/swaggo/gin-… swagger 工具也是刚需:利用它可以生成 swagger 文档. GORM ️️️️️ GORM 也没啥好说的,如果你喜欢 orm 的方式操作数据库,那就选它吧:同样

  • 微信小程序使用第三方库Underscore.js步骤详解

    前言 Underscore.js是一个很精干的库,压缩后只有4KB.Underscore 提供了100多个函数,包括常用的:map.filter.invoke - 当然还有更多专业的辅助函数,如:函数绑定.JavaScript 模板功能.创建快速索引.强类型相等测试等等.弥补了标准库的不足,大大方便了JavaScript的编程. 微信小程序无法直接使用require( 'underscore.js' )进行调用. 微信小程序模块化机制 微信小程序运行环境支持CommoJS模块化,通过module

  • 详解Angular-Cli中引用第三方库

    最近在学习angular(AngularJS 2),根据教程使用angular-cli新建项目,然而在添加JQuery和Bootstrap第三方库时遇到了问题... 初试 我最初的想法是直接将相对路径写到index.html即可,如下: <link rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="external nofollow&qu

  • iOS 使用 socket 实现即时通信示例(非第三方库)

    其实写这个socket一开始我是拒绝的. 因为大家学C 语言和linux基础时肯定都有接触,客户端和服务端的通信也都了解过,加上现在很多开放的第三方库都不需要我们来操作底层的通信. 但是!还是想写.底层的东西最好了解下. 效果 由于5M的上传限制GIF可能看不清 我再截两张图吧 服务器 客户端A 客户端B 模型图 分析 由上图可以了解到服务器和客户端需要做哪些工作 服务器 抽象一点分为: 1.创建线程等待接收客户端的连接 2.接收并解析客户端发来的消息 3.给客户端发送消息 具体一点: 1.创建

  • Linux下为不同版本python安装第三方库

    问题背景 目前的linux发行版上,有很多安装了两个版本的python. 我的机器上默认的版本为python 2.x.且在使用easy_install安装第三方库时,也默认安装到了2.x的版本上,在3.x版本下则无法import安装的库. 环境:Kubuntu 15.04 解决方法 安装python3-setuptools和easy_install3,并安装pip3 sudo apt-get install python3-setuptools sudo easy_install3 pip su

  • Python安装第三方库及常见问题处理方法汇总

    源码安装 Python第三方库几乎都可以在github或者 pypi上找到源码.源码包格式大概有zip . tar.zip. tar.bz2.解压这些包,进入解压好的文件夹,通常会有一个setup.py的文件.打开命令行,进入该文件夹.运行以下命令,就能把这个第三库安装到系统里: python setup.py install 或者借助pip,则不需要解压:pip install package.zip 包管理器安装 现在很多编程语言,都带有包管理器,例如 Ruby 的 gem,nodejs的n

  • Symfony2使用第三方库Upload制作图片上传实例详解

    本文实例分析了Symfony2使用第三方库Upload制作图片上传的方法.分享给大家供大家参考,具体如下: 我们在应用程序或者网站的个人资料里一般都有设置头像的功能,这一章我们在Symfony2里用第三方的一个比较有名Upload库来制作上传图片的功能. 一.安装第三方库 1.在composer.json文件中的"require"中加入 "codeguy/upload": "*" 2.运行指令安装 composer update 二.编码 1.编

随机推荐