Joda Time 使用


layout: default title: Joda Time 使用 category: [工具, Java] comments: true ---

Joda Time 使用

对于系统的一些时间操作很是不方便,为了方便转化,有时候用date,有时候用timestmp,有时候用calendar,忍不住想更改了. 但是任务巨大,先把笔记收藏了,后面有机会再更改了.下面只是几个使用的例子.

1、 获取今天的开始时间:比如:2014-06-19 00:00:00

        //joda
        DateTime nowTime = new DateTime();
        DateTime startOfDay =  nowTime.withTimeAtStartOfDay();
        
        //jdk
        Calendar c1 = Calendar.getInstance();
        c1.setTimeInMillis(timeInMs);
        c1.set(Calendar.HOUR_OF_DAY, 0);
        c1.set(Calendar.MINUTE, 0);
        c1.set(Calendar.SECOND, 0);
        c1.set(Calendar.MILLISECOND, 0);
        return c1.getTimeInMillis();

2、 获取今天的结束时间:比如:2014-06-19 23:59:59

        //joda
        DateTime nowTime = new DateTime();
        DateTime endOfDay =  nowTime.millisOfDay().withMaximumValue();
        
        //jdk
        Calendar c1 = Calendar.getInstance();
        c1.setTimeInMillis(timeInMs);
        c1.set(Calendar.HOUR_OF_DAY, 23);
        c1.set(Calendar.MINUTE, 59);
        c1.set(Calendar.SECOND, 59);
        c1.set(Calendar.MILLISECOND, 0);
        return c1.getTimeInMillis();

3、 获取现在距离今天结束还有多长时间

        //joda
        DateTimenowTime = new DateTime();
        DateTime endOfDay = nowTime.millisOfDay().withMaximumValue();
        endOfDay.getMillis()-nowTime.getMillis()

4、 计算两个日期的相隔天数

  • JodaTime
        //joda
        DateTime nowTime = new DateTime();
        DateTime futureTime = new DateTime(2015, 10, 1, 0, 0, 0);
        Int days = Days.daysBetween(nowTime, futureTime).getDays();
        
        //jdk
        public static int getBetweenDay(long startTime, long endTime) {
            Calendar start = Calendar.getInstance();
            start.setTimeInMillis(startTime);
            Calendar end = Calendar.getInstance();
            end.setTimeInMillis(endTime);
            return (int) ((end.getTimeInMillis() - start.getTimeInMillis()) / 86400000);
        }

5、 创建任意时间对象

        //Joda-time  
        DateTime dateTime=new DateTime(2012, 12, 15, 18, 23,55); 
        
        //jdk  
        Calendar calendar=Calendar.getInstance();  
        calendar.set(2012, Calendar.NOVEMBER, 15, 18, 23,55);  

6、 与JDK互操作

        //通过jdk时间对象构造  
        Date date = new Date();  
        DateTime dateTime = new DateTime(date);  
          
        Calendar calendar = Calendar.getInstance();  
        dateTime = new DateTime(calendar);  
          
        // Joda-time 各种操作.....  
        dateTime = dateTime.plusDays(1) // 增加天  
                            .plusYears(1)// 增加年  
                            .plusMonths(1)// 增加月  
                            .plusWeeks(1)// 增加星期  
                            .minusMillis(1)// 减分钟  
                            .minusHours(1)// 减小时  
                            .minusSeconds(1);// 减秒数  
                              
        // 计算完转换成jdk 对象  
        Date date2 = dateTime.toDate();  
        Calendar calendar2 = dateTime.toCalendar(Locale.CHINA); 

7、 加上90天后输出

        //joda
        DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);
        System.out.println(dateTime.plusDays(90).toString("E MM/dd/yyyy HH:mm:ss.SSS");

        jdk
        Calendar calendar = Calendar.getInstance();
        calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0);
        SimpleDateFormat sdf =
          new SimpleDateFormat("E MM/dd/yyyy HH:mm:ss.SSS");
        calendar.add(Calendar.DAY_OF_MONTH, 90);
        System.out.println(sdf.format(calendar.getTime()));

8、 时间的输出显示

        //通过标准的 ISO-8601输出
        DateTime dateTime = SystemFactory.getClock().getDateTime();
        dateTime.toString(ISODateTimeFormat.basicDateTime());
        dateTime.toString(ISODateTimeFormat.basicDateTimeNoMillis());
        dateTime.toString(ISODateTimeFormat.basicOrdinalDateTime());
        dateTime.toString(ISODateTimeFormat.basicWeekDateTime());

        //传递 SimpleDateFormat字符串输出
        DateTime dateTime = SystemFactory.getClock().getDateTime();
        dateTime.toString("MM/dd/yyyy hh:mm:ss.SSSa");
        dateTime.toString("dd-MM-yyyy HH:mm:ss");
        dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");
        dateTime.toString("MM/dd/yyyy HH:mm ZZZZ");
        dateTime.toString("MM/dd/yyyy HH:mm Z");

        //输出的结果如下:
        20090906T080000.000-0500
        20090906T080000-0500
        2009249T080000.000-0500
        2009W367T080000.000-0500

        09/06/2009 02:30:00.000PM
        06-Sep-2009 14:30:00
        Sunday 06 September, 2009 14:30:00PM
        09/06/2009 14:30 America/Chicago
        09/06/2009 14:30 -0500

参考的博客

Joda Time 使用 - CSDN博客 http://blog.csdn.net/zeus_9i/article/details/32318771

Overview (Joda-Time 2.9.9 API) http://www.joda.org/joda-time/apidocs/

强大易用的日期和时间库 Joda Time - 坚持而不浮躁 - ITeye博客 http://persevere.iteye.com/blog/1755237

Joda-Time 简介 https://www.ibm.com/developerworks/cn/java/j-jodatime.html

Releases · JodaOrg/joda-time(github架包和源码地址) https://github.com/JodaOrg/joda-time/releases

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WD学习记录

LeetCode Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating chara...

1012
来自专栏工科狗和生物喵

【我的漫漫跨考路】数据结构之单链表线性存储实现 Beta

正文之前 ? 昨天晚上阶段性的完成了一部分数学的复习,所以今天打算撸一撸代码,然后发现提电脑忘指针。所以自己磕磕盼盼,对照了一下网上的代码,总算把线性存储单链表...

36211
来自专栏算法与数据结构

PTA 7-4 排座位(25 分)

7-4 排座位(25 分) 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对...

2409
来自专栏Petrichor的专栏

leetcode: 75. Sort Colors

1503
来自专栏尾尾部落

[剑指offer] 二叉树的下一个结点

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

811
来自专栏WD学习记录

牛客网 二叉树的深度

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

781
来自专栏小狼的世界

Aptana的破解

最近写JS比较多,常常苦恼与没有一个顺手的IDE。Editplus虽然用的熟,不过那个的效率太低而且代码看起来也很不方便,经过一个多月的试用,发现了一款好用的编...

1012
来自专栏撸码那些事

【图解数据结构】 二叉树遍历

2804
来自专栏xingoo, 一个梦想做发明家的程序员

伸展树

没看懂,多看几遍吧 1 简介: 伸展树,或者叫自适应查找树,是一种用于保存有序集合的简单高效的数据结构。伸展树实质上是一个二叉查找树。允许查找,插入,删除,删除...

2949
来自专栏数据结构与算法

Day2平衡树笔记

线段树不支持的操作:删除,插入 ---- 常见的平衡树 treap 慢||好写 sbt(大小平衡的树) 非常快 比较好写 ||功能不全 rbt 红黑树 特...

3256

扫码关注云+社区

领取腾讯云代金券