时间处理工具类TimeUtil
转自:https://cnblogs.com/ityouknow/p/5662753.html
功能
Date与String之间的互相转换,以及一些特殊格式的时间字符串处理
代码
/**
* 类名:TimeUtil.java 类描述:时间处理工具
*
* @author wader 创建时间:2011-12-02 11:03
*/
public class TimeUtil {
public final static String FORMAT_DATE = "yyyy-MM-dd";
public final static String FORMAT_TIME = "hh:mm";
public final static String FORMAT_DATE_TIME = "yyyy-MM-dd hh:mm";
public final static String FORMAT_MONTH_DAY_TIME = "MM月dd日 hh:mm";
private static SimpleDateFormat sdf = new SimpleDateFormat();
private static final int YEAR = 365 * 24 * 60 * 60;// 年
private static final int MONTH = 30 * 24 * 60 * 60;// 月
private static final int DAY = 24 * 60 * 60;// 天
private static final int HOUR = 60 * 60;// 小时
private static final int MINUTE = 60;// 分钟 /**
* 根据时间戳获取描述性时间,如3分钟前,1天前
*
* @param timestamp
* 时间戳 单位为毫秒
* @return 时间字符串
*/
public static String getDescriptionTimeFromTimestamp(long timestamp) {
long currentTime = System.currentTimeMillis();
long timeGap = (currentTime - timestamp) / 1000;// 与现在时间相差秒数
System.out.println("timeGap: " + timeGap);
String timeStr = null;
if (timeGap > YEAR) {
timeStr = timeGap / YEAR + "年前";
} else if (timeGap > MONTH) {
timeStr = timeGap / MONTH + "个月前";
} else if (timeGap > DAY) {// 1天以上
timeStr = timeGap / DAY + "天前";
} else if (timeGap > HOUR) {// 1小时-24小时
timeStr = timeGap / HOUR + "小时前";
} else if (timeGap > MINUTE) {// 1分钟-59分钟
timeStr = timeGap / MINUTE + "分钟前";
} else {// 1秒钟-59秒钟
timeStr = "刚刚";
}
return timeStr;
} /**
* 根据时间戳获取指定格式的时间,如2011-11-30 08:40
*
* @param timestamp
* 时间戳 单位为毫秒
* @param format
* 指定格式 如果为null或空串则使用默认格式"yyyy-MM-dd HH:MM"
* @return
*/
public static String getFormatTimeFromTimestamp(long timestamp,
String format) {
if (format == null || format.trim().equals("")) {
sdf.applyPattern(FORMAT_DATE);
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
int year = Integer.valueOf(sdf.format(new Date(timestamp))
.substring(0, 4));
System.out.println("currentYear: "+currentYear);
System.out.println("year: "+year);
if (currentYear == year) {//如果为今年则不显示年份
sdf.applyPattern(FORMAT_MONTH_DAY_TIME);
} else {
sdf.applyPattern(FORMAT_DATE_TIME);
}
} else {
sdf.applyPattern(format);
}
Date date = new Date(timestamp);
return sdf.format(date);
} /**
* 根据时间戳获取时间字符串,并根据指定的时间分割数partionSeconds来自动判断返回描述性时间还是指定格式的时间
*
* @param timestamp
* 时间戳 单位是毫秒
* @param partionSeconds
* 时间分割线,当现在时间与指定的时间戳的秒数差大于这个分割线时则返回指定格式时间,否则返回描述性时间
* @param format
* @return
*/
public static String getMixTimeFromTimestamp(long timestamp,
long partionSeconds, String format) {
long currentTime = System.currentTimeMillis();
long timeGap = (currentTime - timestamp) / 1000;// 与现在时间相差秒数
if (timeGap <= partionSeconds) {
return getDescriptionTimeFromTimestamp(timestamp);
} else {
return getFormatTimeFromTimestamp(timestamp, format);
}
} /**
* 获取当前日期的指定格式的字符串
*
* @param format
* 指定的日期时间格式,若为null或""则使用指定的格式"yyyy-MM-dd HH:MM"
* @return
*/
public static String getCurrentTime(String format) {
if (format == null || format.trim().equals("")) {
sdf.applyPattern(FORMAT_DATE_TIME);
} else {
sdf.applyPattern(format);
}
return sdf.format(new Date());
} /**
* 将日期字符串以指定格式转换为Date
*
* @param time
* 日期字符串
* @param format
* 指定的日期格式,若为null或""则使用指定的格式"yyyy-MM-dd HH:MM"
* @return
*/
public static Date getTimeFromString(String timeStr, String format) {
if (format == null || format.trim().equals("")) {
sdf.applyPattern(FORMAT_DATE_TIME);
} else {
sdf.applyPattern(format);
}
try {
return sdf.parse(timeStr);
} catch (ParseException e) {
return new Date();
}
} /**
* 将Date以指定格式转换为日期时间字符串
*
* @param date
* 日期
* @param format
* 指定的日期时间格式,若为null或""则使用指定的格式"yyyy-MM-dd HH:MM"
* @return
*/
public static String getStringFromTime(Date time, String format) {
if (format == null || format.trim().equals("")) {
sdf.applyPattern(FORMAT_DATE_TIME);
} else {
sdf.applyPattern(format);
}
return sdf.format(time);
}
}
使用范例
public class Test {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String timeStr = "2010-11-30 10:12:23";
try {
Date date = sdf.parse(timeStr);
System.out.println(TimeUtil.getDescriptionTimeFromTimestamp(date
.getTime()));
System.out.println(TimeUtil.getDescriptionTimeFromTimestamp(new Date()
.getTime()));
System.out.println(TimeUtil.getFormatTimeFromTimestamp(date.getTime(),
"yyyy年MM月dd日"));
System.out.println(TimeUtil.getFormatTimeFromTimestamp(date.getTime(),
null));
System.out.println(TimeUtil.getFormatTimeFromTimestamp(new Date().getTime(),
null));
System.out.println(TimeUtil.getMixTimeFromTimestamp(date.getTime(),
3*24 * 60 * 60, "yyyy年MM月dd日 hh:mm"));
System.out.println(TimeUtil.getMixTimeFromTimestamp(date.getTime(),
24 * 60 * 60, null));
System.out.println(TimeUtil.getMixTimeFromTimestamp(new Date().getTime(),
3*24 * 60 * 60, "yyyy年MM月dd日 hh:mm"));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
输出结果
1年前
刚刚
2010年11月30日
2010-11-30 10:12
12月02日 01:21
2010年11月30日 10:12
2010-11-30 10:12
时间处理工具类TimeUtil的更多相关文章
- 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官.” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK ...
- [java工具类01]__构建格式化输出日期和时间的工具类
在之前的学习中,我写过一篇关于字符串格式化的,就主要设计到了时间以及日期的各种格式化显示的设置,其主要时通过String类的fomat()方法实现的. 我们可以通过使用不同的转换符来实现格式化显示不同 ...
- Java中Date类型如何向前向后滚动时间,( 附工具类)
Java中的Date类型向前向后滚动时间(附工具类) 废话不多说,先看工具类: import java.text.SimpleDateFormat; import java.util.Calendar ...
- Java日期时间实用工具类
Java日期时间实用工具类 1.Date (java.util.Date) Date(); 以当前时间构造一个Date对象 Date(long); 构造函数 ...
- jdk8 时间日期工具类(转)
package com.changfu.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import jav ...
- java后端时间处理工具类,返回 "XXX 前" 的字符串
转自:https://www.cnblogs.com/devise/p/9974672.html 我们经常会遇到显示 "某个之间之前" 的需求(比如各种社交软件,在回复消息时,显示 ...
- 11、Java 日期时间 日期工具类
一.简介 在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题.故此,Java8引入了一套全新的日期时间处理 ...
- java时间处理工具类--DateUtils
package com.hexiang.utils; /** * @(#)DateUtil.java * * * @author kidd * @version 1.00 2007/8/8 */ im ...
- 时间处理工具类DateUtils
public class DateUtils { public static final String SHORT_DATE ...
随机推荐
- webapi+DataTables
webapi + datatables 前言 之前写过一个关于DataTables的记录,是之前做webform的时候从后台一次性生成html代码,有很多弊端,就不多说了. 这次把最近研究的DataT ...
- 后缀自动机 (WJMZBMR讲稿的整理和注释)
链接放在这里,有点难理解,至少我个人是的. 后缀自动机是一种有限状态自动机,其功能是识别字符串是否是母串的后缀.它能解决的问题当然不仅仅是判断是不是后缀这种事,跟字符串的连续子串有关的问题都可以往这个 ...
- P1343 地震逃生
题目描述 汶川地震发生时,四川**中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带,每条边都只能容纳一定量 ...
- Java对象、Json、Xml转换工具Jackson使用
在Java项目中將一个对象转换成一段Json格式的字符串是非常常见的,能够实现这种需求的工具包也比较多,例如Gson.JSON-lib.Jackson等等.本文主要介绍Jackson的使用,Jacks ...
- 如何解决 不能以 DISTINCT 方式选择 text、ntext 或 image 数据类型
distinct去重,如果遇到text字段,可以用以下方法解决 1.用not exists select * from tab awhere not exists ( select 1 from t ...
- Sql Server远程还原
1.假设备份文件xxxx.bak大小约300G,还原后所占用的空间为900G 2.磁盘空间只有1T,若将备份文件拷贝过来,空间剩余700G,无法成功还原,因此通过远程方式还原. 例子如下: SQLSE ...
- ASP.NET 页面缓存OutputCache用法实例(附ab压力测试对比图)
本文主要介绍Web窗体页面中的使用方法,MVC中使用方法,大家自行百度. 一.简单一行指令即可实现 <%@ OutputCache VaryByParam=" %> 这样整个页面 ...
- table标签 在谷歌和ie浏览器下不同的表现效果
在项目中有了一个这样的需求: 我需要利用vue的模板语法v-for循环生成tr,这个tr是需要双重循环来确定其个数的, 我的实现: 我在tr外面包了一个template标签, 效果: 谷歌浏览器下实现 ...
- Eclipse中使用GIT提交文件至本地
GIT提交文件至本地: 1. 右击项目——Team——Commit…: 2.在弹出的Commit Changes框中——选择要提交的文件——填写提交说明——点击Commit,即可提交至本地.
- Python——wordcloud
import jiebafrom wordcloud import WordCloud,STOPWORDSimport matplotlib.pyplot as pltfrom scipy.misc ...