朋友圈动态发布时间计算
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);
}
效果类似这种:
本篇博客笔者想给大家分享的事如何通过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);
}
效果类似这种:
相关文章推荐
- 朋友圈动态发布时间计算
- 朋友圈动态发布时间计算
- Android记录19-朋友圈动态发布时间计算
- Android记录19-朋友圈动态发布时间计算
- 关于类似朋友圈的发布时间间隔计算问题(python)
- 网页中实现一个计算当年还剩多少时间的倒数计时程序,要求网页上实时动态显示“××年还剩××天××时××分××秒”
- 时间处理(仿朋友圈、微博发布时间)
- js 文章、通知、公告、新闻等发布时间计算
- 第97课: 使用Spark Streaming+Spark SQL实现在线动态计算出特定时间窗口下的不同种类商品中的热门商品排名
- 第97课: 使用Spark Streaming+Spark SQL+mysql 实现在线动态计算出特定时间窗口下的不同种类商品中的热门商品排名(详细内幕版本)
- asp.net 处理和计算微博发布时间
- PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
- php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
- 收藏一个实用技巧:linux下查看动态链接库so文件的依赖的相关组建发布时间
- 微信小程序仿朋友圈发布动态功能
- 数值计算动态语言Julia 1.0发布
- C#处理和计算微博发布时间
- asp.net 处理和计算微博发布时间
- 写了一个简单的第三方库,功能包括包括转化时间,计算动态行高,获取缓存文件在沙盒的路径
- 网页中实现一个计算当年还剩多少时间的倒数计时程序,要求网页上实时动态显示"××年还剩××天××时××分××秒"