您的位置:首页 > 其它

朋友圈动态发布时间计算

2016-11-15 22:58 369 查看
http://blog.csdn.net/wwj_748/article/details/42528689

本篇博客笔者想给大家分享的事如何通过Calendar来计算我们平时需要用到的年、月、日、时、分、秒等,还有如何计算类似朋友圈动态发布的时间。

这里要大家去了解的几个重要的类:

日历类:Calendar

日期类:Date

日期格式类:SimpleDateFormat

基本上我们对日期的一些转换都是在这几个类中进行的,有以下几个常用的转换:

通过Calendar获取相关日期信息,比如当前的年月日,去年的年月日、下一年的年月日等,这里可以查看笔者关于自定义日历的一篇博文,有提供相关的日期工作类:http://blog.csdn.net/wwj_748/article/details/42244865

Date与Calendar之间的转换

Date与日期字符串的互相转换

首先我们来看如何使用Calendar来获取我们想要的日期信息:

获取当前日历:



[java] view
plain copy

 





Calendar calendar = Calendar.getInstance();  

根据字段来获取信息

获取当前年份:

[java] view
plain copy

 





Calendar.getInstance().get(Calendar.YEAR)  

获取当前月:

[java] view
plain copy

 





Calendar.getInstance().get(Calendar.MONTH) + 1  

注意这里要+1,因为月份是从0开始的。

获取当前月的第几天:

[java] view
plain copy

 





calendar.get(Calendar.DAY_OF_MONTH)  

获取当前时间毫秒显示:

[java] view
plain copy

 





calendar.getTimeInMillis()  

Calendar还可以做很多一些运算,笔者在开发日历控件的时候,就做了很多关于日期的运算:
通过Calendar的add方法来对指定字段进行运算,举例如下:

[java] view
plain copy

 





// 获取去年的年份  

    public static int getLastYear() {  

        Calendar c = Calendar.getInstance();  

        c.add(Calendar.YEAR, -1);  

        return c.get(Calendar.YEAR);  

    }  

      

    // 获取下一年年份  

    public static int getNextYear() {  

        Calendar c = Calendar.getInstance();  

        c.add(Calendar.YEAR, 1);  

        return c.get(Calendar.YEAR);  

    }  

[java] view
plain copy

 





// 获取上一个月的月份  

    public static int getLastMonth() {  

        Calendar c = Calendar.getInstance();  

        c.add(Calendar.MONTH, -1);  

        return c.get(Calendar.MONTH) + 1;  

    }  

      

    // 获取下一个月的月份  

    public static int getNextMonth() {  

        Calendar c = Calendar.getInstance();  

        c.add(Calendar.MONTH, 1);  

        return c.get(Calendar.MONTH) + 1;  

    }  

关于Calendar还有很多字段,希望读者查看API自己去尝试。

Date与Calendar之间的转换

我们可以通过调用Calendar的setTime方法来设置时间所对应的日历对象

[java] view
plain copy

 





calendar.setTime(new Date())  

Date与日期字符串的互相转换

在实际开发中,我们经常需要对服务端返回的日期数据进行格式化,这里就需要用到SimleDateFormat,我们可以指定日期格式:

[java] view
plain copy

 





private static SimpleDateFormat DATE_FORMAT_TILL_SECOND = new SimpleDateFormat(  

        "yyyy-MM-dd HH:mm:ss");  

我们得到一个日期字符串,可以将其转换为Date对象:

[java] view
plain copy

 





/** 

     * 日期字符串转换为Date 

     * @param dateStr 

     * @param format 

     * @return 

     */  

    public static Date strToDate(String dateStr, String format) {  

        Date date = null;  

  

        if (!TextUtils.isEmpty(dateStr)) {  

            DateFormat df = new SimpleDateFormat(format);  

            try {  

                date = df.parse(dateStr);  

            } catch (ParseException e) {  

                e.printStackTrace();  

            }  

        }  

        return date;  

    }  

      

也可以将我们获取的Date对象转换为指定格式的字符串:

[java] view
plain copy

 





/** 

     * 日期转换为字符串 

     * @param timeStr 

     * @param format 

     * @return 

     */  

    public static String dateToString(String timeStr, String format) {  

        // 判断是否是今年  

        Date date = DateHelper.strToDate(timeStr, format);  

        Calendar calendar = Calendar.getInstance();  

        calendar.setTime(date);  

        // 如果是今年的话,才去“xx月xx日”日期格式  

        if (calendar.get(Calendar.YEAR) == getYear()) {  

            return DATE_FORMAT_TILL_DAY_CURRENT_YEAR.format(date);  

        }  

          

        return DATE_FORMAT_TILL_DAY_CH.format(date);  

    }  

最后要说的就是,开发中我们需要计算一条动态的发布时间,一般我们得到的是一条日期字符串,我们需要计算当前时间和动态的发布时间,计算它们的差值来判断发布在什么时候,上代码:

[java] view
plain copy

 





/** 

     * 日期逻辑 

     * @param dateStr 日期字符串 

     * @return 

     */  

    public static String timeLogic(String dateStr) {  

        Calendar calendar = Calendar.getInstance();  

        calendar.get(Calendar.DAY_OF_MONTH);  

        long now = calendar.getTimeInMillis();  

        Date date = strToDate(dateStr, DATE_FORMAT);  

        calendar.setTime(date);  

        long past = calendar.getTimeInMillis();  

          

        // 相差的秒数  

        long time = (now - past) / 1000;  

          

        StringBuffer sb = new StringBuffer();  

        if (time > 0 && time < 60) { // 1小时内  

            return sb.append(time + "秒前").toString();  

        } else if (time > 60 && time < 3600) {  

            return sb.append(time / 60+"分钟前").toString();  

        } else if (time >= 3600 && time < 3600 * 24) {  

            return sb.append(time / 3600 +"小时前").toString();  

        }else if (time >= 3600 * 24 && time < 3600 * 48) {  

            return sb.append("昨天").toString();  

        }else if (time >= 3600 * 48 && time < 3600 * 72) {  

            return sb.append("前天").toString();  

        }else if (time >= 3600 * 72) {  

            return dateToString(dateStr, DATE_FORMAT);  

        }  

        return dateToString(dateStr, DATE_FORMAT);  

    }  

效果类似这种:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐