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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM