文档章节

Joda-time学习笔记

奋斗到天明
 奋斗到天明
发布于 2015/08/27 18:14
字数 948
阅读 3036
收藏 8
点赞 0
评论 0

一、joda的优点展示

joda-time能够便捷地格式化时间输出、设定时间、加减时间、计算时间差值。跟JDK的Date/Calender相比一试便知,每个测试中上半部分是用jdk操作,下半部是用joda-time操作。最后一个我想……实在不想用jdk来实现:

public class JodaTimeTest {
    @Test
    public void testPrintDate(){
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String dateText = format.format(date);
        Assert.assertEquals("2014-11-13", dateText);

        DateTime dateTime = new DateTime();
        dateText = dateTime.toString("yyyy-MM-dd");
        Assert.assertEquals("2014-11-13", dateText);
    }

    @Test
    public void testAddDate(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(2008, Calendar.AUGUST, 8, 0, 0, 0);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E HH:mm:ss");
        calendar.add(Calendar.DAY_OF_MONTH, 90);
        String dateText = sdf.format(calendar.getTime());
        Assert.assertEquals("2008年11月06日 星期四 00:00:00", dateText);

        DateTime dateTime = new DateTime(2008,8, 8, 0, 0, 0, 0);
        dateText = dateTime.plusDays(90).toString("yyyy年MM月dd日 E HH:mm:ss");
        Assert.assertEquals("2008年11月06日 星期四 00:00:00", dateText);
    }

    @Test
    public void testCalcDate(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(2012, Calendar.DECEMBER, 20, 0, 0, 0);
        calendar.add(Calendar.YEAR, 9);
        calendar.add(Calendar.MONTH, 5);
        calendar.add(Calendar.WEEK_OF_MONTH, 2);
        calendar.add(Calendar.DAY_OF_MONTH, 7);
        SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 E");
        String dateText = df.format(calendar.getTime());
        Assert.assertEquals("2022年06月10日 星期五", dateText);

        LocalDate birthDate = new LocalDate(2012, 12, 20);
        dateText = birthDate.plusYears(9).plusMonths(5).plusWeeks(2).plusDays(7).toString("yyyy年MM月dd日 E");
        Assert.assertEquals("2022年06月10日 星期五", dateText);
    }

    @Test
    public void testSomeDate(){;
        LocalDate date = new LocalDate(1990, 10, 24);
        int days = Days.daysBetween(date, new LocalDate()).getDays();
        Assert.assertEquals(8786, days);
    }
}

这三个是比较常见的操作,另外还可以用来计算本周是第几周、某天是星期几(我在生产环境中已使用的接口)等,其他api大家可以参考官网。

二、joda与long、Date、Calendar互转

与三者的互转十分简便,所以joda-time完全可以取代jdk中日期来运算,只要就结果再转换就行。

public class JodaTurnTest {
    @Test
    public void testJoda2Long(){
        long time =  1415861538986L;
        DateTime date = new DateTime(time);
        Assert.assertEquals(time, date.getMillis());  //将时间粒度锁定在秒级别
    }

    @Test
    public void  testJoda2Date(){
        Date dateSource = new Date();
        DateTime dateTime = new DateTime(dateSource);

        Assert.assertEquals(dateSource.getTime(), dateTime.getMillis());

        Date date2 = dateTime.toDate();
        Assert.assertEquals(dateSource, date2);
    }

    @Test
    public void testJoda2Calender(){
        Calendar cal = Calendar.getInstance();
        DateTime dateTime = new DateTime(cal);

        Assert.assertEquals(cal.getTimeInMillis(), dateTime.getMillis());

        Calendar calendar = dateTime.toGregorianCalendar();
        Assert.assertEquals(cal, calendar);
    }
}

三 、joda的概念


Instant:连续时间轴上的某个瞬间,即某时刻,采用UTC 1970年1月1日 00:00:00到目前时刻经历的毫秒数。与unix和jdk中的相同。 joda-time中主类Datetime就采用了Instant,这样就可以与JDK中date,calender交互了。

  joda1 


Partial:日常生活中的时间点,只是一个时间片段,如11点20分,再如9月20号。 Joda-timeAPI中LocalDate、LocalTime、LocalDateTime、YearMonth、MonthDay、Partial、YearMonthDay、TimeOfDay类都是这种概念。 joda2 


Interval:表达的是两个时刻之间的区间段。如: 

joda3

DateTime start = new DateTime(2004, 1, 1, 0, 0, 0, 0);
DateTime end = new DateTime(2005, 1, 1, 0, 0, 0, 0);
Interval interval = new Interval(start, end);


在Interval类接口中,可以得到开始、结束、是否包含等等

DateTime start = interval.getStart();
DateTime end = interval.getEnd();
DateTime testDate = new DateTime(2004, 2, 1, 0, 0, 0, 0);
boolean contains = interval.contains(testDate);


Duration:表示的目前的时刻再持续多久时间,与之前的Interval时间区间该概念类似,不过单位是毫秒。 joda4

DateTime start = new DateTime(1975, 5, 26, 0, 0, 0);
Duration oneThousandMillis = new Duration(1000);
DateTime end = start.plus(oneThousandMillis);


Period:与uration概念类似,不过单位不是毫秒,而是更人性化的单位,如年、月、日。这类的包括Period、MutablePeriod、Years、Months、Weeks、Days Hours、Minutes、Seconds等类。 

joda5

DateTime start = new DateTime(1975, 5, 26, 0, 0, 0);
DateTime end = new DateTime(1978, 7, 23, 0, 0, 0);
Days days = Days.daysBetween(start, end);

四、joda与java8与date4j

java8中提供了新的日期API,而提供者正是Joda。可查看JSR310( https://jcp.org/en/jsr/detail?id=310)。 

date4j是针对joda庞大类系与年表体系,而提供一套极简Api, 可查看( http://www.date4j.net/)。比较遗憾暂时还没有发现中国农历操作的api。

五、参考地址:

ibm上的简介: http://www.ibm.com/developerworks/cn/java/j-jodatime.html 

台湾一哥们写的,本文图片都是来着他的bolg: http://www.codedata.com.tw/java/jodatime-jsr310-3-using-jodatime/ 

官网: http://www.joda.org/joda-time/

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
开源工具整理(持续更新)

工具类 CAL10N 国际化工具 参考 http://cal10n.qos.ch/ joda-time Joda 实际上是涵盖众多用于 Java 语言的替代 API 的大型项目,因此从技术上讲,使用 Joda 和 Joda-Time 名称表示相同的意思...

why_Dk37 ⋅ 2016/11/12 ⋅ 0

Play中的引用其他项目包

Play 1.2.3 中主要包括的第三方包有 xstream xml与obejct互转 snakeyaml yaml解析与发射 slf4j 日志接口相关 signpost Oauth相关,第三方帐号协议 postgresql postgresql数据库驱动 oval Obj...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

java8学习笔记

java8学习笔记 拜读了成熟的毛毛虫的java8的文章,收获不小,在此写下阅读笔记。 语法: 和 ObjectReference::methodName 优点: 代码相对简洁,有利于编译器优化代码,提高多核利用率 目的是...

taojinhuo ⋅ 2014/05/31 ⋅ 0

数据结构与时间日期工具库的干货

还在为数据结构与时间日期工具库尔发愁吗?动力节点Java培训赤裸裸的干货奉上 数据结构 · Apache Parquet:Google Dremel论文中发布的基于组装算法的列式(Columnar)存储格式。 · Protob...

沧海为水 ⋅ 2016/11/25 ⋅ 0

【类库】java时间操作类库:Joda-Time

简介 Joda是一个java的处理时间类库,需要jdk8的支持,是java.time (JSR-310). 来自 今天在无意中学习spring的文档(9.6.2 Annotation-driven Formatting)的Formatter的的源码的时候,发现这...

小彬彬_ ⋅ 2016/09/02 ⋅ 1

Java 8 中新的 Date 和 Time 类入门详解

这篇文章主要是java8中新的Date和Time API的实战。新的Date和Time类是java开发者社区千呼万唤始出来的。Java8 之前存在的Date类一直都受人诟病,很多人都会选择使用第三方的date库joda-time...

默默学习中 ⋅ 2016/05/04 ⋅ 0

开源时间开发工具Joda-time介绍

1 Joda-time介绍 Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。 Joda-Time主要的特点包...

leqianlong ⋅ 2013/11/30 ⋅ 0

Joda-Time 2.9.7 发布,Java 日期时间处理库

Joda-Time 2.9.7 发布了, Joda-Time 提供了一组 Java 类包用于处理包括 ISO8601 标准在内的 date 和 time。可以利用它把 JDK Date 和 Calendar 类完全替换掉,而且仍然能够提供很好的集成。 ...

淡漠悠然 ⋅ 2016/12/20 ⋅ 5

Joda-Time v2.0 发布,Java的日期时间处理

Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。 Joda-Time主要的特点包括: 易于使用:...

红薯 ⋅ 2011/08/02 ⋅ 3

Joda-Time v2.8.2 发布,Java 日期时间处理库

Joda-Time v2.8.2 发布,该版本带来了新的提升,bug 修复等等,主要如下: - DateTimeZone data updated to version 2015f 更多内容请看:change notes 下载地址:v2.8.2 JodaTime 提供了一组...

oschina ⋅ 2015/08/12 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 31分钟前 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部