代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
时间格式化类, 可格式化为XXX秒前,XXX分钟前,XXX小时
作者:
dezai
/ 发布于
2014/2/25
/
234
时间格式化类, 可格式化为XXX秒前,XXX分钟前,XXX小时前
时间日期格式化类 Java 代码 /** * 时 间日期格式化类 * @author yeyong * */ public class PrettyDateFormat extends SimpleDateFormat { private static final long serialVersionUID = 1L; private Pattern pattern = Pattern.compile("('*)(#{1,2}|@)"); private FormatType formatType = FormatType.DEAFULT; private SimpleDateFormat simpleDateFormat; private enum FormatType { DEAFULT, TIME, DAY }; /** * 构 造器 * format 中的@表示[XXX秒前,XXX分钟前,XXX小时前(最多是23小时前)] * format中的#表示[空字串(表示今天),昨天,前天] * format中的##表示[今天,昨天,前天] * * @param format 和SimpleDateFormat中的格式设置基本上是一样的,只是多的@格 式 #格式和##格式 * @param fullFormat 和 SimpleDateFormat中的格式设置是一样的 */ public PrettyDateFormat(String format, String fullFormat) { super(fullFormat); Matcher m = pattern.matcher(format); while (m.find()) { if (m.group(1).length() % 2 == 0) { if ("@".equals(m.group(2))) { if (formatType == FormatType.DAY) { throw new IllegalArgumentException("#和@模式字符不能同时使用."); } formatType = FormatType.TIME; } else { if (formatType == FormatType.TIME) { throw new IllegalArgumentException("#和@模式字符不能同时使用."); } formatType = FormatType.DAY; } } } this.simpleDateFormat = new SimpleDateFormat(format.replace("'", "''")); } @Override public Object parseObject(String source, ParsePosition pos) { throw new UnsupportedOperationException("暂时还不支持的操作"); } /* * (non-Javadoc) * @see java.text.SimpleDateFormat#format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition) */ public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) { if (formatType == FormatType.DEAFULT) { return super.format(date, toAppendTo, pos); } long curTime = System.currentTimeMillis(); long diffDay = 0L; long diffSecond = 0L; if (formatType == FormatType.TIME) { diffSecond = (curTime - date.getTime()) / 1000L; if (diffSecond < 0 || diffSecond >= 86400) { return super.format(date, toAppendTo, pos); } } if (formatType == FormatType.DAY) { Calendar curDate = new GregorianCalendar(); curDate.setTime(new Date(curTime)); curDate.set(Calendar.HOUR_OF_DAY, 23); curDate.set(Calendar.MINUTE, 59); curDate.set(Calendar.SECOND, 59); curDate.set(Calendar.MILLISECOND, 999); diffDay = (curDate.getTimeInMillis() - date.getTime()) / 86400000L; if (diffDay < 0 || diffDay > 2) { return super.format(date, toAppendTo, pos); } } StringBuffer sb = new StringBuffer(); Matcher m = pattern.matcher(simpleDateFormat.format(date)); if (m.find()) { String group2 = m.group(2); String replacement = ""; while (true) { if ("@".equals(group2)) { if (diffSecond < 60) { replacement = diffSecond == 0 ? "1秒前" : diffSecond + "秒前"; } else if (diffSecond < 3600) { replacement = diffSecond / 60 + "分钟前"; } else if (diffSecond < 86400) { replacement = diffSecond / 3600 + "小时前"; } } else { if (diffDay == 0) { replacement = group2.length() == 2 ? "今天" : ""; } else if (diffDay == 1) { replacement = "昨天"; } else { replacement = "前天"; } } m.appendReplacement(sb, replacement); if (!m.find()) { break; } } m.appendTail(sb); } return toAppendTo.append(sb.toString()); } }
试试其它关键字
时间格式化
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
dezai
贡献的其它代码
(
1065
)
.
双色球
.
列出所有物理网络适配器
.
快乐数的 Python 实现
.
计算当月还剩天数
.
猜属相
.
二十四小时时钟
.
每日一语
.
很酷的日历
.
超长日历表单
.
最简单的时钟
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3