转自: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的更多相关文章

  1. 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官.” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK ...

  2. [java工具类01]__构建格式化输出日期和时间的工具类

    在之前的学习中,我写过一篇关于字符串格式化的,就主要设计到了时间以及日期的各种格式化显示的设置,其主要时通过String类的fomat()方法实现的. 我们可以通过使用不同的转换符来实现格式化显示不同 ...

  3. Java中Date类型如何向前向后滚动时间,( 附工具类)

    Java中的Date类型向前向后滚动时间(附工具类) 废话不多说,先看工具类: import java.text.SimpleDateFormat; import java.util.Calendar ...

  4. Java日期时间实用工具类

    Java日期时间实用工具类 1.Date (java.util.Date)    Date();        以当前时间构造一个Date对象    Date(long);        构造函数   ...

  5. jdk8 时间日期工具类(转)

    package com.changfu.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import jav ...

  6. java后端时间处理工具类,返回 "XXX 前" 的字符串

    转自:https://www.cnblogs.com/devise/p/9974672.html 我们经常会遇到显示 "某个之间之前" 的需求(比如各种社交软件,在回复消息时,显示 ...

  7. 11、Java 日期时间 日期工具类

    一.简介 在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题.故此,Java8引入了一套全新的日期时间处理 ...

  8. java时间处理工具类--DateUtils

    package com.hexiang.utils; /** * @(#)DateUtil.java * * * @author kidd * @version 1.00 2007/8/8 */ im ...

  9. 时间处理工具类DateUtils

    public class DateUtils {         public static final String                            SHORT_DATE    ...

随机推荐

  1. 2017-3-4 leetcode 414 485 495

    虽说周末要早起来着,但是日子过得有点奇怪,一不小心就忘掉了... leetcode414 https://leetcode.com/problems/third-maximum-number/?tab ...

  2. Python3字符串 详解

    Python3 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可. Python 访问字符串中的值 P ...

  3. ScrollView和ListView滑动冲突问题

    1.在ScrollView里面嵌套ListView时,ListView的滑动事件无法响应. 先看下事件分发的过程: 由父View层的  onInterceptTouchEvent    到中间层的on ...

  4. SQL Server中怎样可以从SELECT语句的结果集中删除重复行

    首先要分析出现重复记录的原因,是不是有一些where条件没有加上,把该加的条件都加上如果还有结果集重复,考虑以下方法去重: 结果集中去除重复行可以使用函数[distinct]也可以使用分组语句[gro ...

  5. 跟着8张思维导图学习javascript (转)

    学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将po出8张javascript相关的思维导图. 思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又 ...

  6. 关于优化for循环的注意的事项

    for循环注意事项: 1.for循环内部尽量少做数据库查询之类的IO代价大的操作 2.尽量控制for循环的次数,不多做无用功 3.能一次加载在内存中的,就不要通过循环来多次查询数据库,除非数据量过大. ...

  7. 七天C#小结

    从基础的理论知识,到最后一天,能够理解并且自己编写出一些经典的事例,自己期初觉得不会这么快,几乎是零基础的自己从什么都不会,到七天后能够独立思考并且编写出100多行的代码,自己还是有些欣慰的,从点到面 ...

  8. apache include 文件包含引用的方法 报错 [an error occurred while processing this directive]

    今天遇到在某平台买的虚拟主机服务器不支持    下面的这样的写法 <!--#Include file="/templets/2013new/header.htm"--> ...

  9. vue中slot的用法案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. LeetCode Golang 5. 最长回文子串

    5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...