文档章节

Java日期简化工具Joda-Time

FEINIK
 FEINIK
发布于 2017/03/01 00:10
字数 758
阅读 1006
收藏 83

简介

    想必大家在平时的项目开发中经常要处理日期的问题,比如需要处理两个日期间隔的天数,使用JDK1.8以前自带的日期API处理相当的繁琐(JDK1.8的API已经重写了日期库,其实也是借鉴了Joda-Time),那么接下来介绍的这款日期库工具(Joda-Time)就非常强大了,使用Joda-Time可以轻松的处理各种复杂的时间相关问题。

特点

  • 易于使用:使用Joda-Time可以非常容易的处理一些复杂的日期问题
  • 易于扩展:Joda-Time支持多达8种日历系统
  • 线程安全:Joda类具有不可变性,因此它们的实例无法被修改
  • 提供最新的时区计算
  • 互操作性:与JDK可互操作

类说明

  • Instant:不可变类,代表时间线上的一个唯一的时间点
  • DateTime:不可变类,它以毫秒级的精度封装时间上的某个瞬间时刻
  • LocalDate:不可变类,该类封装了一个年/月/日的组合。当地理位置(即时区)变得不重要时,使用它存储日期将非常方便
  • LocalTime:不可变类,这个类封装一天中的某个时间,当地理位置不重要的情况下,可以使用这个类来只存储一天当中的某个时间
  • LocalDateTime:不可变类,该类封装了一个年/月/日 时:分:秒的组合。当地理位置(即时区)变得不重要时,使用它存储日期和时间非常方便

使用示例

(1)使用maven导入Joda-Time包

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

(2)DateTime使用

如需输出当前日期和时间

DateTime dateTime = new DateTime();
System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
//本月多少号
int dayOfMonth = dateTime.getDayOfMonth();
//本年的第几月
int monthOfYear = dateTime.getMonthOfYear();
//获取年份
int year = dateTime.getYear();
//当前日期+1天后的时间
dateTime = dateTime.plusDays(1);
//当前日期+1小时的时间
dateTime = dateTime.plusHours(1);
//当前日期-1年前的时间
dateTime = dateTime.plusYears(-1);
//创建指定日期时间如:2017-2-28 10:40:50:500
DateTime dateTime = new DateTime(2017,2,28,10,40,50,500);

(3)LocalDate使用

该类代表没有时区的日期,适用与对时区不关心的日期场景

LocalDate localDate = new LocalDate();
LocalDate lDate = new LocalDate(2017,12,12);

(4)LocalTime使用

该类代表没有时区的时间,适用与对时区不关心的时间场景

LocalTime localTime = new LocalTime();
LocalTime lTime = new LocalTime(12,20,10);

(5)LocalDateTime使用

该类代表没有时区的日期时间,适用与对时区不关心的日期时间场景

LocalDateTime localDateTime = new LocalDateTime();
//2017-12-12 13:10:18
LocalDateTime localDateTime2 = new LocalDateTime(2017,12,12,13,10,18);

(6)与JDK互操作

Date date = dateTime.toDate();
Calendar calendar = dateTime.toCalendar(Locale.CHINESE);

(7)综合使用

LocalDate localDate = new LocalDate();
//计算下一个月的第一天的日期
localDate = localDate.plusMonths(1).dayOfMonth().withMinimumValue();
DateTime dateTime = new DateTime();
//计算一年前的第二个月的最后一天的日期
DateTime dateTime = dateTime.minusYears(1) // 一年前
      .monthOfYear()     // 获得 monthOfYear 属性
      .setCopy(2)        // 设置为2月
      .dayOfMonth()      // 获得 dayOfMonth 属性
      .withMaximumValue();// 一个月中的最后一天

 

© 著作权归作者所有

FEINIK
粉丝 227
博文 61
码字总数 61705
作品 0
广州
高级程序员
私信 提问
加载中

评论(2)

零域1
零域1
直接使用Java8,无需引入额外的jar
polly
polly
joda很不错,一直这么觉得。不过实际应用中时间操作只是业务逻辑中微乎其微的一点点,所以一直没有狠心引入一个依赖,遗憾。可以从这个api包学习一下设计思想
joda-time 时间处理工具

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kisscatforever/article/details/89240738 一、前言 说到java的时间处理,我们一般用到的有包里面的 和 类里面...

AresCarry
04/12
0
0
java8中的时间处理0 - api介绍

Java 8 Date Time API是我们java开发一直寻找的时间处理工具。java从一开始设计的时间类就让人头疼,好在现在终于有了java8。 为什么我们需要这套API 只要是有这么几个理由: Java的日期和时...

davelet
2018/02/22
0
0
Java 8 Time Api 使用指南-珍藏限量版

1.概述 Java 8为Date和Time引入了新的API,以解决旧和的缺点。作为本文的一部分,让我们从现有Date和Calendar API存在的一些问题入手,来探讨新的Java 8 Date和Time API如何解决这些问题。我...

码农小胖哥
08/28
93
0
Java 8新特性探究(七)深入解析日期和时间-JSR310

博客一个月没更新了,这次给大家讲下java8时间与日期API。 众所周知,日期是商业逻辑计算一个关键的部分,任何企业应用程序都需要处理时间问题。应用程序需要知道当前的时间点和下一个时间点...

OSC闲人
2014/01/17
16.3K
21
关于一些比较好用的工具类以及用之前与之后的差别

java好用的工具收集 Guava Guava CharMatcher(由于版本的更新 许多方法做了些许变动 如果需要详细查询可以去api官网 https://ifeve.com/google-guava/) Joiner and Splitter Jode-Time 介绍...

曲中人_
01/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nettysocetio-demo2(nettysocetio通讯,两客户端聊天,群发消息改造)

前言: 网上大多数都是只能群发,或者只能发给自己.并没有一个案例完整的群发并且又可以客户端之间聊天的案例,特此改造好的案例给大家分享一下.只要是一对一聊天,一对多群发. 此案例是在服务器...

RobertZhou
12分钟前
6
0
@JsonFormat与@DateTimeFormat注解的使用

背景:从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获取出来却变成了很丑的时间戳,@JsonFormat注解...

万建宁
15分钟前
3
0
辍学北漂,从月薪2k服务员到2W报表工程师,我的数据追梦故事

本文为真实故事,绝无虚构 每个数据人在与数为伴,全力奔跑的日子里,总会有一些难忘的体验。 那些加班最深的夜,那些磨练后的成长,那些因数据带来的新的见遇,都让我们的人生变得丰富多彩。...

朕想上头条
19分钟前
3
0
Scrapy - [twisted] CRITICAL: Unhandled error in Deferred-你的配置文件还在吗?

找到问题的那一刻,骂了自己N次的猪脑子!!! 问题:爬虫脚本本来一切正常的,临时有其他事情耽搁了,然后回头正式运行的时候发现一只报错 [twisted] CRITICAL: Unhandled error in Deferre...

fang_faye
34分钟前
3
0
在Serverless Kubernetes集群中轻松运行Argo Workflow

导读 Argo是一个基于kubernetes实现的一个Workflow(工作流)开源工具,基于kubernetes的调度能力实现了工作流的控制和任务的运行。 目前阿里云容器服务ACK集群中已经支持工作流的部署和调度,...

阿里云官方博客
50分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部