Android 日期轉換

說說最近項目中一個特別小的細節:日期轉化。比如說遊客在某個時間訪問了主頁,需要確定這個時間是今天,還是昨天,還是其他時間來訪問的。

因爲覺得這個特別常用,所以就寫了個小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;
    }

}

通過以上,可以將時間很細節化的處理。不同項目的需求或許又會有所不同,有需要的可以鑑於以上再做相應修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章