经常看到社交类app中关于动态发布的时间点与当前时间的换算,说麻烦也不麻烦,说简单也不简单,只是计算起来有点绕。如以当前时间为基准,自己某个时间在微博上发表一个动态,发表时间提示有多种显示,如刚刚、几分钟前、几个小时前、昨天、前天、日期等等。自己之前做过类似的时间换算,虽然不是最优,但最终效果还是达到了,下面附上源码

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDate {
/** 准备第一个模板,从字符串中提取出日期数字  */
private static String pat1 = "yyyy-MM-dd HH:mm:ss" ;
/** 准备第二个模板,将提取后的日期数字变为指定的格式*/
private static String pat2 = "yyyy年MM月dd日 HH:mm:ss" ;
/** 实例化模板对象*/
private static SimpleDateFormat sdf1 = new SimpleDateFormat(pat1) ;
private static SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ;
public static void main(String[] args) {
Date dates = Dates();
String string = sdf1.format(dates);
System.out.println(string);
String time = "2013-01-29 19:38:21";
System.out.println(getTime(time));
}
public static Long farmatTime(String string){
Date date =null;
try {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = Date(sf.parse(string));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return date.getTime();
}
public static Date Date(Date date){
Date datetimeDate;
datetimeDate = new Date(date.getTime());
return datetimeDate;
}
public static Date Dates(){
Date datetimeDate;
Long dates  = 1361515285070L;
datetimeDate = new Date(dates);
return datetimeDate;
}
public static String getTime(String commitDate) {
// TODO Auto-generated method stub
// 在主页面中设置当天时间
Date nowTime = new Date();
String currDate = sdf1.format(nowTime);
Date date = null ;
try{
// 将给定的字符串中的日期提取出来
date = sdf1.parse(commitDate) ;
}catch(Exception e){
e.printStackTrace() ;
}
int nowDate = Integer.valueOf(currDate.substring(8, 10));
int commit = Integer.valueOf(commitDate.substring(8, 10));
String monthDay = sdf2.format(date).substring(5, 12);
String yearMonthDay = sdf2.format(date).substring(0, 12);
int month = Integer.valueOf(monthDay.substring(0, 2));
int day = Integer.valueOf(monthDay.substring(3, 5));
if (month < 10 && day <10) {
monthDay = monthDay.substring(1, 3) + monthDay.substring(4);
}else if(month < 10){
monthDay = monthDay.substring(1);
}else if (day < 10) {
monthDay = monthDay.substring(0, 3) + monthDay.substring(4);
}
int yearMonth = Integer.valueOf(yearMonthDay.substring(5, 7));
int yearDay = Integer.valueOf(yearMonthDay.substring(8, 10));
if (yearMonth < 10 && yearDay <10) {
yearMonthDay = yearMonthDay.substring(0, 5) + yearMonthDay.substring(6,8) + yearMonthDay.substring(9);
}else if(yearMonth < 10){
yearMonthDay = yearMonthDay.substring(0, 5) + yearMonthDay.substring(6);
}else if (yearDay < 10) {
yearMonthDay = yearMonthDay.substring(0, 8) + yearMonthDay.substring(9);
}
String str = " 00:00:00";
float currDay = farmatTime(currDate.substring(0, 10) + str);
float commitDay = farmatTime(commitDate.substring(0, 10) +str);
int currYear = Integer.valueOf(currDate.substring(0, 4));
int commitYear = Integer.valueOf(commitDate.substring(0, 4));
int flag = (int)(farmatTime(currDate)/1000 - farmatTime(commitDate)/1000);
String des = null;
String hourMin = commitDate.substring(11, 16);
int temp = flag;
if (temp < 60) {
System.out.println("A");
if (commitDay < currDay) {
des = "昨天  " + hourMin;
}else {
des = "刚刚";
}
}else if (temp < 60 * 60) {
System.out.println("B");
if (commitDay < currDay) {
des = "昨天  " + hourMin;
}else {
des = temp/60 + "分钟以前";
}
}else if(temp< 60*60*24){
System.out.println("C");
int hour = temp / (60*60);
if (commitDay < currDay) {
des = "昨天  " + hourMin;
}else {
if (hour < 6) {
des = hour + "小时前";
}else {
des = hourMin;
}
}
}else if (temp < (60 * 60 * 24 *2 )) {
System.out.println("D");
if (nowDate - commit == 1) {
des = "昨天  " + hourMin;
}else {
des = "前天  " + hourMin;
}
}else if (temp < 60 * 60 * 60 * 3) {
System.out.println("E");
if (nowDate - commit == 2) {
des = "前天  " + hourMin;
}else {
if (commitYear < currYear) {
des = yearMonthDay + hourMin;
}else {
des = monthDay + hourMin;
}
}
}else {
System.out.println("F");
if (commitYear < currYear) {
des = yearMonthDay + hourMin;
}else {
des = monthDay + hourMin;
}
}
if (des == null) {
des = commitDate;
}
return des;
}
public static Date Date(){
Date datetimeDate;
Long dates  = 1361514787384L;
datetimeDate = new Date(dates);
return datetimeDate;
}
}

运行结果:

2013-01-29 19:38:21  转换结果

下图为新浪关于时间显示效果图

类似新浪微博动态发布时间转换机制,显示刚刚、几分钟前、几小时前、昨天、前天····相关推荐

  1. 微信小程序-将时间转换成几秒前 几分钟前 几小时前 几天前等时间格式

    描述: 显示消息时间为 几天前 几小时前 几分钟前:同时一年以上的日期直接显示YYY:MM:DD形式 效果: 方法实现: 可以在utils目录下建一个存放公共方法的文件,将getDateDiff方法放 ...

  2. PHP人性化时间显示,实现多少秒前,多少分钟前,多少小时前

    现在很多网站的时间显示都很人性化,不再是单纯的年月日时分秒,而是根据数据更新的时间与当前时间进行比较,实现多少秒前,多少分钟前,多少小时前! //人性化时间显示 function formatTime ...

  3. 使用day.js让时间 (显示为几分钟前 几小时前 几天前 几个月前 )

    效果图 代码 utils.ts 通过引入utils.ts import dayjs from 'dayjs'; import 'dayjs/locale/zh-cn'; import relative ...

  4. JS 时间转化为几分钟前 几小时前 几天前

    背景:最近公司要做动态列表,类似于微信朋友圈.动态创建时间就需要显示为 刚刚.几分钟前.几小时前.几天前.2018-05-15,这样的形式. 代码如下 var minute = 1000 * 60;v ...

  5. php微博发布时间,PHP格式化显示时间函数,用于微博、社交媒体等,类似豆瓣

    /*** 格式化显示时间函数** 类似豆瓣(几秒前/几分前/今天3:50/昨天3:50/3-6)** @param $timestamp 时间戳 必选参数,后面三个参数可选,为提高计算速度,建议直接赋 ...

  6. php时间转分钟前,PHP把时间转换成几分钟前几小时前几天前

    现在很多网站将时间的显示都变得比较人性化,今天项目有一个也需要在对应的资讯后面显示为几分钟前.几小时前,接下来吾爱编程为大家分享一下PHP把时间转换成几分钟前.几小时前几天前的方法,有需要的小伙伴可以 ...

  7. 小程序--时间处理(显示几分钟前,,几小时前,,几天前...)

    效果图  (通过js实现对时间处理); 这是时间处理的函数, 代码注释说明的也还清楚,   这是文件链接,可以直接打开,保存一下 https://blog-static.cnblogs.com/fil ...

  8. 根据时间戳显示刚刚/几分钟前/几小时前/今天等等

    规则是: 一分钟内显示刚刚 一小时内显示几分钟前 24小时内显示今天几点几分 24 - 48小时内显示昨天几点几分 一年内显示几月几日 一年前显示 年-月-日 function timestampFo ...

  9. 时间格式化 几分钟前 几小时前 几天前

    /*** 时间24小时显示格式化*/ public class FormatDateUtils {/**// 一小时以内显示几分钟前:// 24小时内显示几小时前:// 超过24小时三天内(含三天)显 ...

最新文章

  1. 三个线程按循序一个打印A一个打印B一个打印C 循环打印?
  2. Css2.0+Css3.0+jQuery手册 chm
  3. 1分钟了解CDN内容分发技术
  4. 7.1Python异常处理
  5. Union与Union All的区别
  6. DyFPN:浙大华为诺亚西湖大学等提出用于目标检测的动态特征金字塔,减少40%的FLOPs!...
  7. sql 计算单行数据字段空值比例_如何利用工具,迅猛定位低效SQL? | 1分钟系列...
  8. mini web框架-2-显示页面
  9. php mongodb长连接吗,PHP - MongoDB连接攻略
  10. 进化计算中基于分类的预处理代理模型
  11. Primer设计PCR引物的方法,在线引物设计网站汇总整理
  12. python 登录新浪微博_Python模拟新浪微博登录
  13. excel两个表格数据对比_excel如何1秒钟合并两个不同表格数据?收下这个方法吧...
  14. 在SpringBoot中实现通用Auth认证,有哪几种方式?
  15. 恒相电子画册项目使用unxt框架打正式版 使用nginx发布项目失败解决方案
  16. vs2017/2019无法登陆:我们无法刷新此账户的凭据,解决方法(亲测可用)
  17. Java 实现手机短信发送
  18. gamma 色彩饱和度_网页设计师的色彩:了解Gamma
  19. SQL Server DATEADD() 函数和DATEDIFF() 函数
  20. boss直聘账号异常登不上_python爬虫Scrapy:爬取boss数据

热门文章

  1. iPhone忘记密码的找回
  2. InstructGPT:Pooled testing to isolate infected individuals
  3. web服务器设置文档,web服务器设置
  4. 2023年3月异地转太原公积金贷款材料
  5. mongodb 客户端连接服务器
  6. common commands
  7. Linux操作文档——进程和计划任务管理
  8. 安卓驱动开发要干的那些事
  9. php多分支结构问题,php的一些新的分支结构以及include问题【include_path】
  10. 习题8-2 在数组中查找指定元素