几秒前,几分钟前,几小时前,几天前,几月前,几年前的java实现
2016-01-20 11:26
513 查看
在代码开发的时候,特别是那种论坛啊什么的要返回“几秒前,几分钟前,几小时前,几天前,几月前,几年前”这样的时间格式,服务端那边只肯返回yyyy-MM-dd HH:mm:ss的格式,没办法,只能客户端加个转换了。
代码如下:
调用的时候传入时间,今天是2016年1月20号
看打印的log,算出来是没问题的。
代码如下:
public class RelativeDateFormat { private static final long ONE_MINUTE = 60000L; private static final long ONE_HOUR = 3600000L; private static final long ONE_DAY = 86400000L; private static final long ONE_WEEK = 604800000L; private static final String ONE_SECOND_AGO = "秒前"; private static final String ONE_MINUTE_AGO = "分钟前"; private static final String ONE_HOUR_AGO = "小时前"; private static final String ONE_DAY_AGO = "天前"; private static final String ONE_MONTH_AGO = "月前"; private static final String ONE_YEAR_AGO = "年前"; public static String format(Date date) { long delta = new Date().getTime() - date.getTime(); if (delta < 1L * ONE_MINUTE) { long seconds = toSeconds(delta); return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO; } if (delta < 45L * ONE_MINUTE) { long minutes = toMinutes(delta); return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO; } if (delta < 24L * ONE_HOUR) { long hours = toHours(delta); return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO; } if (delta < 48L * ONE_HOUR) { return "昨天"; } if (delta < 30L * ONE_DAY) { long days = toDays(delta); return (days <= 0 ? 1 : days) + ONE_DAY_AGO; } if (delta < 12L * 4L * ONE_WEEK) { long months = toMonths(delta); return (months <= 0 ? 1 : months) + ONE_MONTH_AGO; } else { long years = toYears(delta); return (years <= 0 ? 1 : years) + ONE_YEAR_AGO; } } private static long toSeconds(long date) { return date / 1000L; } private static long toMinutes(long date) { return toSeconds(date) / 60L; } private static long toHours(long date) { return toMinutes(date) / 60L; } private static long toDays(long date) { return toHours(date) / 24L; } private static long toMonths(long date) { return toDays(date) / 30L; } private static long toYears(long date) { return toMonths(date) / 365L; } }
调用的时候传入时间,今天是2016年1月20号
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = format.parse("2015-11-11 18:35:35"); System.out.println(RelativeDateFormat.format(date)); } catch (ParseException e) { e.printStackTrace(); }
看打印的log,算出来是没问题的。
相关文章推荐
- Java 多字符分割字符串
- struts2——(2)struts开发使用基本步骤
- eclipse 安装其他插件后,SVN失效的解决
- java的动态绑定与双分派
- LeetCode 328. Odd Even Linked List Java
- Java WebService 简单实例
- JAVA去掉空格
- IO流2(字符流缓冲区、字节流、装饰设计模式、转换流)
- JAVA多线程实现的三种方式
- MyEclipse使用总结——在MyEclipse中设置jsp页面为默认utf-8编码
- java getResourceAsStream
- Spring整合Ehcache
- JAVA线程互斥、同步详解
- JAVA设计模式之外观模式(Facade)
- Java中的接口
- Lombok的用途及在eclipse中使用Lombok
- 整合SpringMVC 和 Quartz 的两种方式
- 关于Hibernate在反向工程时无法选择Spring DAO Type的解决方法【更新版】
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)