說說最近項目中一個特別小的細節:日期轉化。比如說遊客在某個時間訪問了主頁,需要確定這個時間是今天,還是昨天,還是其他時間來訪問的。
因爲覺得這個特別常用,所以就寫了個小demo,可以作爲一個工具類使用。註釋中做了詳細說明。
/**
* @param time :2016-11-01 08:59:40
* @return
*/
private String parseTime(String time) {
//將當前日期轉化爲calendar:
Calendar currentCal = Calendar.getInstance();
Date nowDate = new Date(System.currentTimeMillis());
currentCal.setTime(nowDate);
//將source日期轉化爲calendar
Calendar sourceCal = Calendar.getInstance();
SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd");
Date sourceDate = null;
try {
sourceDate = formate.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
sourceCal.setTime(sourceDate);
if(currentCal.get(Calendar.YEAR)==sourceCal.get(Calendar.YEAR)){
//Calendar.DAY_OF_YEAR:day number within the current year.
// The first day of the year has value 1.
int days = currentCal.get(Calendar.DAY_OF_YEAR)-sourceCal.get(Calendar.DAY_OF_YEAR);
if(days==0){
return "今天";
} else if(days==1){
return "昨天";
}else{
return time;
}
}else{
return time;
}
}
現在來驗證下日期:
private String[] timeList = {"2016-11-01 08:59:40","2016-10-31 08:59:40","2016-10-30 08:59:40"};
String time1 = parseTime(timeList[0]);
String time2 = parseTime(timeList[1]);
String time3 = parseTime(timeList[2]);
mTv1.setText(time1);
mTv2.setText(time2);
mTv3.setText(time3);
用三個textview展示3個解析過的時間,展示如下,已經能正確解析了。
再補充下:
有時候需求是如QQ聊天中的時間格式顯示,這裏借鑑環信demo中的時間處理:
//處理時間
public static String getTimestampString(Date var0) {
String var1 = null;
if(isThisYear(var0)){
long var2 = var0.getTime();
if(isSameDay(var2)) {
Calendar var4 = GregorianCalendar.getInstance();
var4.setTime(var0);
int var5 = var4.get(Calendar.HOUR_OF_DAY);
if(var5 > 17) {
var1 = "晚上 hh:mm";
} else if(var5 >= 0 && var5 <= 6) {
var1 = "凌晨 hh:mm";
} else if(var5 > 11 && var5 <= 17) {
var1 = "下午 hh:mm";
} else {
var1 = "上午 hh:mm";
}
} else if(isYesterday(var2)) {
var1 = "昨天 HH:mm";
} else {
var1 = "M月d日 HH:mm";
}
}else{
SimpleDateFormat formatter = new SimpleDateFormat( "yyyy年M月d日 HH:mm");
var1 = formatter.format(var0);//格式化數據
}
return (new SimpleDateFormat(var1, Locale.CHINA)).format(var0);
}
//判斷是否是今年
public static boolean isThisYear(Date var0){
Calendar ca=Calendar.getInstance();
ca.setTime(new Date());
int year = ca.get(Calendar.YEAR);
Calendar ca1 =Calendar.getInstance();
ca1.setTime(var0);
int year1 = ca1.get(Calendar.YEAR);
if(year==year1){
return true;
}else{
return false;
}
}
//判斷是否是同一天
private static boolean isSameDay(long var0) {
TimeInfo var2 = getTodayStartAndEndTime();
return var0 > var2.getStartTime() && var0 < var2.getEndTime();
}
//獲取一天的開始時間和結束時間,封裝到TimeInfo 類中。
public static TimeInfo getTodayStartAndEndTime() {
Calendar var0 = Calendar.getInstance();
var0.set(Calendar.HOUR_OF_DAY, 0);
var0.set(Calendar.MINUTE, 0);
var0.set(Calendar.SECOND, 0);
var0.set(Calendar.MILLISECOND, 0);
Date var1 = var0.getTime();
long var2 = var1.getTime();
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss S");
Calendar var5 = Calendar.getInstance();
var5.set(Calendar.HOUR_OF_DAY, 23);
var5.set(Calendar.MINUTE, 59);
var5.set(Calendar.SECOND, 59);
var5.set(Calendar.MILLISECOND, 999);
Date var6 = var5.getTime();
long var7 = var6.getTime();
TimeInfo var9 = new TimeInfo();
var9.setStartTime(var2);
var9.setEndTime(var7);
return var9;
}
public class TimeInfo {
private long startTime;
private long endTime;
public TimeInfo() {
}
public long getStartTime() {
return this.startTime;
}
public void setStartTime(long var1) {
this.startTime = var1;
}
public long getEndTime() {
return this.endTime;
}
public void setEndTime(long var1) {
this.endTime = var1;
}
}
通過以上,可以將時間很細節化的處理。不同項目的需求或許又會有所不同,有需要的可以鑑於以上再做相應修改。