版權聲明:本文為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對於字符串的時間解析也很強力。這個可以大家去研究。