jodo-time

本贴最后更新于 3602 天前,其中的信息可能已经时移世异

Joda-Time 令时间和日期值变得易于管理、操作和理解。


Home:http://joda-time.sourceforge.net/

JavaDoc:http://joda-time.sourceforge.net/apidocs/index.html

直接看代码,这是在网上和根据API整理的一些例子,使用时看例子就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.yan.joda;
 
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
 
public class JodaTest {
 
    public static void main(String[] args) {
        //初始化时间
                DateTime dateTime=new DateTime(2012, 12, 13, 18, 23,55);
                 
                // 年,月,日,时,分,秒,毫秒  
                DateTime dt3 = new DateTime(2011, 2, 13, 10, 30, 50, 333);// 2010年2月13日10点30分50秒333毫秒
                 
                //下面就是按照一点的格式输出时间
                String str2 = dateTime.toString("MM/dd/yyyy hh:mm:ss.SSSa");
                String str3 = dateTime.toString("dd-MM-yyyy HH:mm:ss");
                String str4 = dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");
                String str5 = dateTime.toString("MM/dd/yyyy HH:mm ZZZZ");
                String str6 = dateTime.toString("MM/dd/yyyy HH:mm Z");
                 
                DateTimeFormatter format = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");
                //时间解析  
                DateTime dateTime2 = DateTime.parse("2012-12-21 23:22:45", format);  
                   
                //时间格式化,输出==> 2012/12/21 23:22:45 Fri  
                String string_u = dateTime2.toString("yyyy/MM/dd HH:mm:ss EE");  
                System.out.println(string_u);  
                   
                //格式化带Locale,输出==> 2012年12月21日 23:22:45 星期五  
                String string_c = dateTime2.toString("yyyy年MM月dd日 HH:mm:ss EE",Locale.CHINESE);  
                System.out.println(string_c);
                 
                DateTime dt1 = new DateTime();// 取得当前时间
                  
                // 根据指定格式,将时间字符串转换成DateTime对象,这里的格式和上面的输出格式是一样的  
                DateTime dt2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("2012-12-26 03:27:39");
                 
                //计算两个日期间隔的天数
                LocalDate start=new LocalDate(2012, 12,14);  
                LocalDate end=new LocalDate(2013, 01, 15);  
                int days = Days.daysBetween(start, end).getDays();
                 
                //计算两个日期间隔的小时数,分钟数,秒数
                 
                //增加日期
                DateTime dateTime1 = DateTime.parse("2012-12-03");
                dateTime1 = dateTime1.plusDays(30);
                dateTime1 = dateTime1.plusHours(3);
                dateTime1 = dateTime1.plusMinutes(3);
                dateTime1 = dateTime1.plusMonths(2);
                dateTime1 = dateTime1.plusSeconds(4);
                dateTime1 = dateTime1.plusWeeks(5);
                dateTime1 = dateTime1.plusYears(3);
                 
                // Joda-time 各种操作.....  
                dateTime = dateTime.plusDays(1) // 增加天  
                                    .plusYears(1)// 增加年  
                                    .plusMonths(1)// 增加月  
                                    .plusWeeks(1)// 增加星期  
                                    .minusMillis(1)// 减分钟  
                                    .minusHours(1)// 减小时  
                                    .minusSeconds(1);// 减秒数
                 
                //判断是否闰月  
                DateTime dt4 = new DateTime();  
                org.joda.time.DateTime.Property month = dt4.monthOfYear();  
                System.out.println("是否闰月:" + month.isLeap());
                 
                //取得 3秒前的时间  
                DateTime dt5 = dateTime1.secondOfMinute().addToCopy(-3);  
                dateTime1.getSecondOfMinute();// 得到整分钟后,过的秒钟数  
                dateTime1.getSecondOfDay();// 得到整天后,过的秒钟数  
                dateTime1.secondOfMinute();// 得到分钟对象,例如做闰年判断等使用
                 
                // DateTime与java.util.Date对象,当前系统TimeMillis转换  
                DateTime dt6 = new DateTime(new Date());  
                Date date = dateTime1.toDate();  
                DateTime dt7 = new DateTime(System.currentTimeMillis());  
                dateTime1.getMillis(); 
                 
                Calendar calendar = Calendar.getInstance();  
                dateTime = new DateTime(calendar);
    }
}

下面是一个小例子用来计算小宝宝从出生到现在总共的天数小时数等,首先用jdk的类去做,不用joda,然后再用joda去做,以做比较

用jdk做的例子,这里算的从出生到现在的时间间隔是准确的,如果是输入的某天来算的话就不是很准确,多一秒就算一天。可以看到用jdk去做的话,要写的代码还是挺繁琐的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
 
public class CalBaby {
    private final static String birthday = "2012-3-10 08:20:55";
    /**
     * @param args
     */
    public static void main(String[] args) {
        while(true){
            String format1 = "yyyy-MM-dd";
            String format2 = "yyyy-MM-dd HH:mm:ss";
            Scanner s = new Scanner(System.in);
            System.out.println("########################################");
            cutTwoDateToDay(convertToDate1(birthday,format2),new Date(),false);
            System.out.println("请选择操作");
            System.out.println("请输入日期(格式例如:2012-11-08)");
            System.out.println("########################################");
            String endDateStr = s.nextLine();
            Date endDate = convertToDate1(endDateStr,format1);
            if(endDate == null){
                System.out.println("输入格式错误!请重新输入.");
                continue;
            }
            boolean inputFlag = true;
            cutTwoDateToDay(convertToDate1(birthday,format2),endDate,inputFlag);
        }
         
    }
     
    /** 
     * 计算两个日期之间的差距天数 
     *  
     * @param a 
     * @param b 
     * @return 
     */  
    public static void cutTwoDateToDay(Date beginDate, Date endDate,boolean inputFlag) {  
        Calendar calendar = Calendar.getInstance();  
        long intervalDays = 0;  
        calendar.setTime(beginDate);  
        long begin = calendar.getTimeInMillis();  
        calendar.setTime(endDate);  
        long end = calendar.getTimeInMillis();
        long totalM = end - begin;
        System.out.println((end -begin));
        System.out.println(24*60*60*1000);
        intervalDays = totalM /(24*60*60*1000);
        long intervalHours = (totalM - (intervalDays*24*60*60*1000))/(60*60*1000);
       long intervalMin = (totalM - intervalDays * (24*60*60*1000) - intervalHours*60*60*1000)/(60*1000);
       if(inputFlag){
           if(totalM > 0L && totalM %(24*60*60*1000) > 0L){
               intervalDays = intervalDays + 1;
           }
           System.out.println("宝宝从出生到"+formatDate(endDate,"yyyy-MM-dd")+"已经"+intervalDays+"天了");
       }else{
           System.out.println("宝宝来到这个世界已经"+intervalDays+"天"+intervalHours+"小时"+intervalMin+"分钟了");
       }
         
    
     
    /** 
     * 将字符串日期转换为Date   yyyy-MM-dd HH:mm:ss  yyyy-MM-dd
     *  
     * @param s 
     * @return 
     */  
    public static Date convertToDate1(String s,String format) {  
 
        if (s == null) {  
            return null;  
        }  
        try {  
            SimpleDateFormat df = new SimpleDateFormat(format);  
            return df.parse(s);  
        catch (Exception e) {  
            return null;  
        }  
    }
         
    public static String formatDate(Date date, String strType)
    {
        if (date == null)
        {
            return null;
        }
 
        SimpleDateFormat sdf = new SimpleDateFormat(strType);
        try
        {
            return sdf.format(date);
        }
        catch (Exception e)
        {
            return null;
        }
    }
}

下面是用joda来做,用这个来做就简单的多了,而且也很准确。

 
 
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 2 关注

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 649 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 74 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 749 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    199 引用 • 543 回帖 • 2 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 5 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 167 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 363 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 4 关注
  • Word
    13 引用 • 41 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 764 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    952 引用 • 944 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    949 引用 • 1460 回帖
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 3 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 17 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 107 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 2 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 1 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    67 引用 • 114 回帖 • 193 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖