转自: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

最新文章

  1. 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机
  2. IMAGE_LOAD_CONFIG_DIRECTORY64 SafeSEH检测 表
  3. android开发--布局三(微信布局)
  4. 2015-10-27 js
  5. 使用zipalign.exe工具优化APK安装包
  6. bootstrap-validator使用
  7. [译]Java Thread join示例与详解
  8. SVN ignores
  9. 【Android】数据的应用-使用sharedpreferences存储数据
  10. 用RBG颜色设置自定义颜色
  11. javascript笔记整理(流程控制)
  12. 【.NET】Linq几样特点
  13. Oracle的闪回技术--闪回错误的DML操作
  14. Springboot与Mybatis整合
  15. python request
  16. python之路(9)反射、包装类、动态模块导入
  17. Akka-CQRS(4)- CQRS Writer Actor 示范
  18. 使用C#爬小说
  19. conda环境py36 requirements.txt
  20. [转]bootstrap table 动态列数

热门文章

  1. 超高性能管线式HTTP请求(实践&#183;原理&#183;实现)
  2. 终端安全工具 gartner 排名
  3. oracle 11gR2 如何修改public ip
  4. Linux就该这么学 20181008(第十三章BIND)
  5. wamp openssl
  6. category的概念
  7. Session会在浏览器关闭后消失吗?
  8. C++ MAP使用
  9. C# 实现透明可移动窗体
  10. 下拉列表的使用(Ajax/数据联动)