是的,Yup唤醒了我的死人,但这是基于@mtim发布的代码的我改进的实现,因为该线程几乎位于搜索的顶部,所以我弄得昏昏欲睡,

public static String getFriendlyTime(Date dateTime) {

StringBuffer sb = new StringBuffer();

Date current = Calendar.getInstance().getTime();

long diffInSeconds = (current.getTime() - dateTime.getTime()) / 1000;

/*long diff[] = new long[]{0, 0, 0, 0};

/* sec *  diff[3] = (diffInSeconds >= 60 ? diffInSeconds % 60 : diffInSeconds);

/* min *  diff[2] = (diffInSeconds = (diffInSeconds / 60)) >= 60 ? diffInSeconds % 60 : diffInSeconds;

/* hours *  diff[1] = (diffInSeconds = (diffInSeconds / 60)) >= 24 ? diffInSeconds % 24 : diffInSeconds;

/* days * diff[0] = (diffInSeconds = (diffInSeconds / 24));

*/

long sec = (diffInSeconds >= 60 ? diffInSeconds % 60 : diffInSeconds);

long min = (diffInSeconds = (diffInSeconds / 60)) >= 60 ? diffInSeconds % 60 : diffInSeconds;

long hrs = (diffInSeconds = (diffInSeconds / 60)) >= 24 ? diffInSeconds % 24 : diffInSeconds;

long days = (diffInSeconds = (diffInSeconds / 24)) >= 30 ? diffInSeconds % 30 : diffInSeconds;

long months = (diffInSeconds = (diffInSeconds / 30)) >= 12 ? diffInSeconds % 12 : diffInSeconds;

long years = (diffInSeconds = (diffInSeconds / 12));

if (years > 0) {

if (years == 1) {

sb.append("a year");

} else {

sb.append(years + " years");

}

if (years <= 6 && months > 0) {

if (months == 1) {

sb.append(" and a month");

} else {

sb.append(" and " + months + " months");

}

}

} else if (months > 0) {

if (months == 1) {

sb.append("a month");

} else {

sb.append(months + " months");

}

if (months <= 6 && days > 0) {

if (days == 1) {

sb.append(" and a day");

} else {

sb.append(" and " + days + " days");

}

}

} else if (days > 0) {

if (days == 1) {

sb.append("a day");

} else {

sb.append(days + " days");

}

if (days <= 3 && hrs > 0) {

if (hrs == 1) {

sb.append(" and an hour");

} else {

sb.append(" and " + hrs + " hours");

}

}

} else if (hrs > 0) {

if (hrs == 1) {

sb.append("an hour");

} else {

sb.append(hrs + " hours");

}

if (min > 1) {

sb.append(" and " + min + " minutes");

}

} else if (min > 0) {

if (min == 1) {

sb.append("a minute");

} else {

sb.append(min + " minutes");

}

if (sec > 1) {

sb.append(" and " + sec + " seconds");

}

} else {

if (sec <= 1) {

sb.append("about a second");

} else {

sb.append("about " + sec + " seconds");

}

}

sb.append(" ago");

/*String result = new String(String.format(

"%d day%s, %d hour%s, %d minute%s, %d second%s ago",

diff[0],

diff[0] > 1 ? "s" : "",

diff[1],

diff[1] > 1 ? "s" : "",

diff[2],

diff[2] > 1 ? "s" : "",

diff[3],

diff[3] > 1 ? "s" : ""));*/

return sb.toString();

}

显然可以改进。基本上,它试图使时间跨度更友好,但是有一些限制,即,如果经过的时间(参数)是将来的话,它的行为会很奇怪,并且仅限于天,小时和秒(不包括月和年)处理,以便其他人可以;-)。

示例输出为:

大约一秒钟前

8分34秒前

一个小时四分钟前

一天前

29天前

一年零三个月前

,欢呼声:D

编辑:现在支持月份和年份:P

java计算时间跨度_请问如何使用Java计算时间跨度并格式化输出?相关推荐

  1. java node类_请问Node是Java库当中的一个类吗?

    Node 是org.w3c.dom包下定义接口其子接口很多 javax.xml.soap的Node接口方法定义如下 getValue String getValue()如果这是一个 Text 节点,则 ...

  2. java怎么计算时间差_请问java怎么计算时间差

    比如:现在是2004-03-26 13:31:40 过去是:2004-01-02 11:30:24 我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒 方法一: DateFormat df ...

  3. 编写一个java程序_鼠标在java窗口上的坐标_请问如何在Java中获取窗口外部的鼠标单击坐标...

    尽管可能,但可能会受到限制: 为焦点事件添加一个AWTEventListener.只要您的应用在单击按钮之前就具有焦点,就会收到焦点丢失事件.然后查询指针位置. 限制是,当然,您的应用程序失去了焦点. ...

  4. java lua脚本_请问该如何在Java中使用Lua脚本语言?

    如何在Java中使用Lua脚本语言是本文要介绍的内容,主要是来学习LUA脚本语言在JAVA中如何来使用,Lua就不说了, 现在比较热门, 语法也很简单. 为了在Java中调用, 折腾了比较长的时间, ...

  5. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  6. java 判断类型_如何快速入门Java编程学习(干货)

    一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...

  7. 做Java头发少_这35个Java代码优化细节,你用了吗

    链接:https://www.jianshu.com/p/6e472304b5ac 前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有 ...

  8. java编程赋值运算符_跟我学java编程—简单赋值运算符“=”

    赋值运算符是双目运算符,用在赋值表达式中.赋值运算符将值存储在运算符左边操作数指定的变量中.有两种赋值操作,简单赋值和复合赋值,简单赋值把运算符右边的操作数的值存储在运算符左边操作数指定的变量中:复合 ...

  9. java 异常信息_优雅的异常处理 -- Java中的异常

    处理异常自己处理 try-catch抛出让别人处理 throws 获得异常信息 直接打印异常对象 通过异常对象调用getMessage()方法获得 通过异常对象调用printStackTrace()方 ...

最新文章

  1. html相邻兄弟选择器,CSS CSS 相邻兄弟选择器 - 闪电教程JSRUN
  2. 程序员面试题精选100题(36)-在字符串中删除特定的字符[算法]
  3. .Net程序猿玩转Android开发---(7)相对布局RelativeLayout
  4. Python的3种字符串格式化,做个超全对比!
  5. 设计模式之组合模式(Composite 模式)
  6. 玩Java 8 – Lambda,路径和文件
  7. 冲刺阶段 day 6
  8. Quick BI产品核心功能大图(六)开放集成
  9. asp ado 连接测试_ASP.NET Core 简介
  10. scrapy shell 用法(慢慢更新...)
  11. soap协议有get方式
  12. 打算升级到 Monterey?我们为你准备了一份 macOS 安全升级指南
  13. Eclipse Scout架构商业应用开发的工具与环境
  14. oracle停数据库服务器,优化Oracle停机时间及数据库恢复
  15. Android定时器AlarmManager(定时发送广播)
  16. 批量增加字段值 mysql_按照一定规则批量修改表中新增字段的值
  17. window安装python27和配置环境变量
  18. Python小数整数输出
  19. 《机器学习—李宏毅》HW1
  20. bios显示计算机故障,笔记本电脑BIOS出现故障怎么办 常见BIOS故障解决方案

热门文章

  1. 控件onkeyup事件,使验证控件不能即时验证
  2. 数据结构——顺序表(二)
  3. wordpress 介绍
  4. Gin加载静态html img文件
  5. linux sed命令整行替换:将`PermitRootLogin`行替换成`PermitRootLogin yes`
  6. Spark广播变量使用示例
  7. python3 读取配置文件中的参数值替换yaml文件中的占位符(变量)
  8. 图解Hadoop hdfs读数据的流程
  9. TCP协议的4次握手
  10. spring mvc工作原理及组件说明