您的位置:首页 > 其它

如何将时间改为显示:几天前,几小时前,或者几分钟前

2016-04-11 10:17 477 查看
http://www.oschina.net/question/657074_89320#tags_nav

如何将时间改为显示:几天前,几小时前,或者几分钟前

如这样的 最后发帖:2011-01-05 12:33
要改成这样怎么实现:
最后发表: 2分钟前
最后发表: 28秒前
最后发表: 2025-04-18
最后发表: 2小时前

最后发表: 2天前

解答:

创建时间-当前时间

如果在60秒之内显示多少秒之前,

如果大于60秒在60分之内,显示多少分

……以此类推

timemap加减

个人做法是保存时间戳,然后在前端用jq插件做转换,比如 smart-time-ago

有一个后台方法专门转换的。

时间格式化类库 PrettyTime

官方说支持超过25种语言,可用设置语言,默认是读取系统语言设置

OSC应该是用的前端做的,去年@红薯 有分享出来这个日期JQ插件

osc android手机端里开源代码就有

private final static ThreadLocal<SimpleDateFormat> dateFormater2 = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};
/**
* 以友好的方式显示时间
* @param sdate
* @return
*/
public static String friendly_time(String sdate) {
Date time = toDate(sdate);
if(time == null) {
return "Unknown";
}
String ftime = "";
Calendar cal = Calendar.getInstance();

//判断是否是同一天
String curDate = dateFormater2.get().format(cal.getTime());
String paramDate = dateFormater2.get().format(time);
if(curDate.equals(paramDate)){
int hour = (int)((cal.getTimeInMillis() - time.getTime())/3600000);
if(hour == 0)
ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000,1)+"分钟前";
else
ftime = hour+"小时前";
return ftime;
}

long lt = time.getTime()/86400000;
long ct = cal.getTimeInMillis()/86400000;
int days = (int)(ct - lt);
if(days == 0){
int hour = (int)((cal.getTimeInMillis() - time.getTime())/3600000);
if(hour == 0)
ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000,1)+"分钟前";
else
ftime = hour+"小时前";
}
else if(days == 1){
ftime = "昨天";
}
else if(days == 2){
ftime = "前天";
}
else if(days > 2 && days <= 10){
ftime = days+"天前";
}
else if(days > 10){
ftime = dateFormater2.get().format(time);
}
return ftime;
}

/**
* 将字符串转位日期类型
* @param sdate
* @return
*/
public static Date toDate(String sdate) {
try {
return dateFormater.get().parse(sdate);
} catch (ParseException e) {
return null;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: