zoukankan      html  css  js  c++  java
  • Java日期处理组件joda-time

    版权声明:本文为xing_star原创文章,转载请注明出处!

    本文同步自http://javaexception.com/archives/175

    Java日期处理组件joda-time

    平常在开发过程中,处理日期时间,基本上会使用SimpleDateFormat来处理,用这个也还行,不过有时候想找个强力点的工具类,关于时间日期处理的,我期望的是,对于给定的时间戳或者是一串字符串的时间格式,能够有强大的Api,可以方便的帮我解析出年月日,时分秒,此外也可以知道这个时间戳对应的是这一年的第多少天,这个月的多少天等等。经过一番调研,发现Java的第三方框架中,有一个joda-time,这个日期处理组件对时间日期解析做了增强,功能真的很强大,这里推荐给大家使用。

    从16年到现在,这个组件我在很多个项目中使用。接下来用一个常见的需求场景,展示joda-time的部分用法。

    如下图所示,我想要实现图中的时间展示效果,下午6:47,晚上9:09,上午11:48等

    完整的代码如下:

    public static String getTimeString2(String time) {
        long timeMills = Long.parseLong(time);
        DateTime dateTime = new DateTime(timeMills);
        int hourOfDay = dateTime.getHourOfDay();
        int hourOfDayOf12 = hourOfDay;
        int minute = dateTime.getMinuteOfHour();
        String extra = "";
        if (hourOfDay == 0) {
            extra = "凌晨";
            hourOfDayOf12 = 12;
        } else if (hourOfDay > 0 && hourOfDay < 12) {
            extra = "上午";
        } else if (hourOfDay >=12 && hourOfDay < 13) {
            extra = "中午";
        } else if (hourOfDay > 13 && hourOfDay <= 18) {
            extra = "下午";
            hourOfDayOf12 = hourOfDay - 12;
        } else if (hourOfDay > 18 && hourOfDay <= 23) {
            extra = "晚上";
            hourOfDayOf12 = hourOfDay - 12;
        }
        String prefixMinute = "";
        if (minute < 10) {
            prefixMinute = "0";
        }
        return extra + hourOfDayOf12 + ":" + prefixMinute + minute;
    }

    joda-time中,常用的Api是DateTime,一般情况下,我们可以将long类型的时间戳传入DateTime的构造方法,之后就可以通过DateTiem的对象获取到各种关于日期时间的值

    dateTime.getHourOfDay();//当天几点
    dateTime.getMinuteOfHour();//这个小时内的分钟数
    dateTime.getYear();//哪一年
    dateTime.getMonthOfYear();//月份
    dateTime.getDayOfMonth();//这个月的几号
    dateTime.getDayOfYear();//这一年的第几天
    DateTime.now().getDayOfYear();//获取当天是这一年的第几天

    接着再看另外一个图片的效果,这个图片展示的效果,我期望的是显示具体的年月日,还有昨天,以及如果是当天的话,展示当天的上午中午下午具体时间。

     

    完整的代码如下:

    public static String getTimeString(String time) {
        long timeMills = Long.parseLong(time);
        DateTime dateTime = new DateTime(timeMills);
        int year = dateTime.getYear();
        int month = dateTime.getMonthOfYear();
        int dayOfMonth = dateTime.getDayOfMonth();
        int dayOfYear = dateTime.getDayOfYear();
        int nowDayOfYear = DateTime.now().getDayOfYear();
        if (dayOfYear <= nowDayOfYear) {
            if (dayOfYear == nowDayOfYear) {
                return getTimeString2(time);
            } else if (nowDayOfYear - dayOfYear == 1) {
                return "昨天";
            } else {
                return year + "/" + month + "/" + dayOfMonth;
            }
        }
        return year + "/" + month + "/" + dayOfMonth;
    }

    这里面关于判断是否是今天的判断用的就是

    dateTime.getDayOfYear()
    if(dateTime.getDayOfYear() == DateTime.now().getDayOfYear());//表示就是今天

    对于joda-time,还有很多其他的Api没有介绍,这个就等有需求场景的时候在去研究吧,joda-time对于字符串的时间解析也很强力。这个可以大家去研究。

    Github项目地址

    https://github.com/JodaOrg/joda-time

  • 相关阅读:
    matplotlib讲义
    车间调度问题(part3: 遗传算法)
    sympy库和matplotlib库简介
    python列表
    第十周周三练习
    第十一周周一练习题
    MyEcplise中关于部署文件不成功的问题
    Java中的get()和set()方法
    Java中this关键字的使用
    信号完整性问题的几个基本原则
  • 原文地址:https://www.cnblogs.com/xing-star/p/11248979.html
Copyright © 2011-2022 走看看