时间库 Joda Time使用介绍

栏目: Java · 发布时间: 6年前

内容简介:直接上代码,以下是结合API和网上一些常用例子整理,可以直接运用在你自己的代码中,做参考:其他就不多举例了,Joda-Time可以大大提高我们的代码效率,并且不容易出错,以上仅供参考。

Joda-Time的关键特性:

  • LocalDate:只包含日期
  • LocalTime:只包含时间
  • Instant:时间轴上的时间点
  • DateTime:时区中完整的日期和时间
  • DateTimeZone:更精确的时区
  • Duration和Period:持续时间
  • Interval:两个时间点之间的时间
  • 全面并且灵活的时间格式化与转换

举例

直接上代码,以下是结合API和网上一些常用例子整理,可以直接运用在你自己的代码中,做参考:

public class JodaTest {  
    public static void main(String[] args) {  
        //初始化时间  
        DateTime dateTime=new DateTime(2018, 12, 18, 18, 23,55);  

        // 年,月,日,时,分,秒,毫秒    
        DateTime dt3 = new DateTime(2018, 12, 18, 18, 23,55, 333);// 2018年12月18日18点23分55秒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("2018-12-21 23:22:45", format);    

        //时间格式化,输出==> 2018/12/21 23:22:45 Fri    
        String string_u = dateTime2.toString("yyyy/MM/dd HH:mm:ss EE");    
        System.out.println(string_u);    

        //格式化带Locale,输出==> 2018年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("2018-12-26 03:27:39");  
        //计算两个日期间隔的年数,月数,天数,小时数,分钟数,秒数  
        Interval  interval = new Interval(dt1.getMillis(),dt2.getMillis());
        Period period = interval.toPeriod();
        System.out.printf("%d years, %d months, %d days, %d hours, %d minutes, %d seconds%n",
period.getYears(), period.getMonths(), period.getDays(),  
period.getHours(), period.getMinutes(), period.getSeconds());  
        //计算两个日期间隔的天数  
        LocalDate start=new LocalDate(2017, 12,14);    
        LocalDate end=new LocalDate(2018, 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的Calendar比较

  • 获取18天之后的某天再下个月的当前周的第一天时间
//jdk  
Calendar current = Calendar.getInstance();  
current.add(Calendar.DAY_OF_MONTH, 18);  
current.add(Calendar.MONTH, 1);  
     ......  
DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
Date date = current.getTime();  
String dateStr = dateFormat.format(date);  
System.out.println(dateStr);  

//joda-time  
String dateStr = new DateTime().plusDays(18).plusMonths(1)  
    .dayOfWeek().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss");  
System.out.println(dateStr);
  • 计算两日期相差的天数
//jdk  
Calendar start = Calendar.getInstance();  
start.set(2017, Calendar.DECEMBER, 14);  
Calendar end = Calendar.getInstance();  
end.set(2018, Calendar.DECEMBER, 15);  
long startTim = start.getTimeInMillis();  
long endTim = end.getTimeInMillis();  
long diff = endTim-startTim;  
int days=(int) (diff/1000 / 3600 / 24);  

//joda-time  
LocalDate start=new LocalDate(2017, 12,14);  
LocalDate end=new LocalDate(2018, 12, 15);  
int days = Days.daysBetween(start, end).getDays();

总结

其他就不多举例了,Joda-Time可以大大提高我们的代码效率,并且不容易出错,以上仅供参考。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程卓越之道

编程卓越之道

Hyde R / 韩东海 / 电子工业出版社 / 2006-4-1 / 49.80

各位程序员一定希望自己编写的代码是能让老板赞赏、满意的代码;是能让客户乐意掏钱购买的代码;是能让使用者顺利使用的代码;是能让同行欣赏赞誉的代码;是能让自己引以为豪的卓越代码。本书作者为希望能编写出卓越代码的人提供了自己积累的关于卓越编程的真知灼见。它弥补了计算机科学和工程课程中被忽略的一个部分——底层细节,而这正是构建卓越代码的基石。具体内容包括:计算机数据表示法,二进制数学运算与位运算,内存组织......一起来看看 《编程卓越之道》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具