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;
    }

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值