今天把幾個有關日期格式化的通用格式記錄一下,以前總是用到了纔去找,太麻煩了。
其實總的來說,我們可能遇見的也就是幾種形式:
1.直接顯示一個格式的日期
2.拿到一個格式的日期轉換成另外一種
3.其他常用的方式
長時間使用發現操作也挺簡單,就是容易忘記了。
直接格式化使用:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
simpleDateFormat.format(new Date());//格式化日期爲yyyy-MM-dd 的格式,這裏的format的參數是一個Date對象。
先解析再重新格式化:
這個情況出現在我們拿到了一個字符串的時間,要求顯示成另外的一種格式。
如拿到了2017-03-01 12:23:20 這個時間,要求顯示爲:3月1日
String time = "2017-03-01 12:23:20";
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy年MM月dd");
SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("MM月dd hh時mm分");
@Test public void test2(){ try { String time = "2017-03-01 12:23:20"; Date date = simpleDateFormat1.parse(time); String format = simpleDateFormat2.format(date); String format1 = simpleDateFormat3.format(date); Logger.e(TAG,format); Logger.e(TAG,format1); } catch (ParseException e) { e.printStackTrace(); } }
結果是:
這個使用方式基本上可以轉換我們需要的各種格式。
還有一個人爲的轉換,要求我們把一個時間轉換成如:
1分鐘前,2小時前,1天前這種。
這個沒有找到好的方法,目前可以通過手動的方式實現:
public static String getTimeDes(String time) { String result = time; try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = df.parse(time); long dateTimeStamp = date.getTime(); long minute = 1000 * 60; long hour = minute * 60; long day = hour * 24; long halfamonth = day * 15; long month = day * 30; long now = new Date().getTime(); long diffValue = now - dateTimeStamp; if (diffValue < 0) { // toast("結束日期不能小於開始日期!"); } long monthC = diffValue / month; long weekC = diffValue / (7 * day); long dayC = diffValue / day; long hourC = diffValue / hour; long minC = diffValue / minute; if (monthC >= 1) { result = date.getMonth() + 1 + "月" + date.getDate() + "日"; } else if (weekC >= 1) { result = date.getMonth() + 1 + "月" + date.getDate() + "日"; } else if (dayC > 1) { result = date.getMonth() + 1 + "月" + date.getDate() + "日"; } else if (dayC == 1) { result = "昨天 " + date.getHours() + ":" + date.getMinutes(); } else if (hourC >= 1) { result = Integer.parseInt(hourC + "") + "小時前"; } else if (minC >= 1) { result = Integer.parseInt(minC + "") + "分鐘前"; } else { result = "剛剛"; } } catch (Exception e) { e.printStackTrace(); } return result; }
還有一個可能能用到的時間轉換,在做播放視頻,音頻時格式化,我們知道一個毫秒的時間值,需要轉換成hh:mm:ss這樣的格式。
如我們可能知道一個視頻當前播放時間是:123000毫秒
/**
* 把秒轉換成:12:20:30這裏形式
*
* @param timeMs
* @return
*/
private static String formatSecond2Time(int timeMs) {
int seconds = timeMs % 60;
int minutes = (timeMs / 60) % 60;
int hours = timeMs / 3600;
mFormatBuilder.setLength(0);
if (hours > 0) {
return mFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString();
} else {
return mFormatter.format("%02d:%02d", minutes, seconds).toString();
}
}
/**
* 把毫秒轉換成:1:20:30這裏形式
*
* @param timeMs
* @return
*/
public static String formatMillisecond2Time(int timeMs) {
int totalSeconds = timeMs / 1000;
return formatSecond2Time(totalSeconds);
}
實例:
@Test
public void test3(){
int time = 1234000;
String ss = DateUtils.formatMillisecond2Time(time);
Logger.e(TAG,"格式化後:"+ss);
}
結果:
以上幾種簡單的操作做一個記錄,方便後續使用。