Android 日期转换

来源:互联网 发布:水暖工程预算表软件 编辑:程序博客网 时间:2024/06/05 07:33

说说最近项目中一个特别小的细节:日期转化。比如说游客在某个时间访问了主页,需要确定这个时间是今天,还是昨天,还是其他时间来访问的。

因为觉得这个特别常用,所以就写了个小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;    }}

通过以上,可以将时间很细节化的处理。不同项目的需求或许又会有所不同,有需要的可以鉴于以上再做相应修改。

0 0
原创粉丝点击