废话不说直接上代码:
package cn.java.sys.common.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @author java
* @description 日期工具类
*/
public abstract class DateUtil {
private static Calendar calendar = Calendar.getInstance();
private static SimpleDateFormat simpleDateFormat = (SimpleDateFormat) SimpleDateFormat
.getInstance();
public static int GetWeekofYear() {
int weeknum = 0;
Calendar c = Calendar.getInstance();
c.setTime(new Date());
weeknum = c.get(Calendar.WEEK_OF_YEAR);
return weeknum;
}
/**
* @description 解析日期 字符串
* @param date
* 日期字符串
* @param type
* 日期类型
* @return Date
*/
public static Date parse(String date, DateFormatType type) {
simpleDateFormat.applyPattern(type.getValue());
try {
return simpleDateFormat.parse(date);
} catch (ParseException e) {
return null;
}
}
/**
* @description 格式化日期字符串(默认类型 yyyy-MM-dd HH:mm:ss)
* @param date
* 日期
* @return String
*/
public static final String format(Date date) {
if (date == null) {
return "";
}
simpleDateFormat.applyPattern(DateFormatType.DEFAULT_TYPE.getValue());
return simpleDateFormat.format(date);
}
/**
* @description 通过格式化类型格式化日期
* @param date
* 日期
* @param type
* 格式化类型
* @return String
*/
public static String format(Date date, DateFormatType type) {
try {
simpleDateFormat.applyPattern(type.getValue());
return simpleDateFormat.format(date);
} catch (Exception e) {
}
return null;
}
/**
* @description 传入timeStamp格式化日期字符串
* @param longDate
* timeStamp
* @param type
* 日期格式化类型
* @return String
*/
public static String format(long longDate, DateFormatType type) {
return format(new Date(longDate), type);
}
/**
* @description 将当前日期字符处格式化
* @param type
* 日期格式化类型
* @return String
*/
public static String format(DateFormatType type) {
return format(new Date(), type);
}
/**
* 得到时间格式例如 2002-03-15
*/
public static final String format(long dateLong) {
return format(new Date(dateLong));
}
/**
* 得到日期时间格式例如 2002-03-15 02:32:25
*/
public static final String formatTime(java.util.Date date) {
return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
}
public static final String formatTime(long lngDate) {
if (0 >= lngDate) {
return "";
} else {
return formatTime(new Date(lngDate));
}
}
public static final String formatTime(Long lngObj) {
return formatTime(lngObj.longValue());
}
/**
* 得到小时,分的格式例如 02:32
*/
public static final String getFormatTime(java.util.Date date) {
String Tempstr;
int i;
SimpleDateFormat mydate = new SimpleDateFormat(" MMM dd H mm ss,yyyy");
Tempstr = "";
mydate.applyPattern("H");
i = Integer.parseInt(mydate.format(date));
if (i < 10) {
Tempstr = Tempstr + "0" + String.valueOf(i) + ":";
} else {
Tempstr = Tempstr + String.valueOf(i) + ":";
}
mydate.applyPattern("mm");
i = Integer.parseInt(mydate.format(date));
if (i < 10) {
Tempstr = Tempstr + "0" + String.valueOf(i);
} else {
Tempstr = Tempstr + String.valueOf(i);
}
return Tempstr;
}
/**
* 得到小时的格式例如 02
*/
public static final String getFormatHour(java.util.Date date) {
String Tempstr;
int i;
SimpleDateFormat mydate = new SimpleDateFormat(" MMM dd H mm ss,yyyy");
Tempstr = "";
mydate.applyPattern("H");
i = Integer.parseInt(mydate.format(date));
Tempstr = Tempstr + String.valueOf(i);
return Tempstr;
}
/**
*
* 得到小时的格式例如 02
*/
public static final String getFormatMinute(Date date) {
String Tempstr;
int i;
SimpleDateFormat mydate = new SimpleDateFormat(" MMM dd H mm ss,yyyy");
Tempstr = "";
mydate.applyPattern("mm");
i = Integer.parseInt(mydate.format(date));
Tempstr = Tempstr + String.valueOf(i);
return Tempstr;
}
/**
* 根据日期得到年份字符串
*/
public static final String getYear(Date date) {
String Tempstr;
int i;
SimpleDateFormat mydate = new SimpleDateFormat(" MMM dd H mm ss,yyyy");
Tempstr = "";
mydate.applyPattern("yyyy");
i = Integer.parseInt(mydate.format(date));
Tempstr = Tempstr + String.valueOf(i);
return Tempstr;
}
/**
* 根据日期得到月份字符串
*/
public static final String getMonth(Date date) {
String Tempstr;
int i;
SimpleDateFormat mydate = new SimpleDateFormat(" MM dd H mm ss,yyyy");
Tempstr = "";
mydate.applyPattern("MM");
i = Integer.parseInt(mydate.format(date));
Tempstr = Tempstr + String.valueOf(i);
return Tempstr;
}
/**
* 根据日期得到日期字符串
*/
public static final String getDay(Date date) {
String Tempstr;
int i;
SimpleDateFormat mydate = new SimpleDateFormat(" MM dd H mm ss,yyyy");
Tempstr = "";
mydate.applyPattern("dd");
i = Integer.parseInt(mydate.format(date));
Tempstr = Tempstr + String.valueOf(i);
return Tempstr;
}
/**
* 根据日期得到小时字符串
*/
public static final String getHour(Date date) {
String Tempstr;
int i;
SimpleDateFormat mydate = new SimpleDateFormat(" MM dd H mm ss,yyyy");
Tempstr = "";
mydate.applyPattern("H");
i = Integer.parseInt(mydate.format(date));
Tempstr = Tempstr + String.valueOf(i);
return Tempstr;
}
/**
* 用于只输入年月日生成long型的时间格式
**/
public static final long getTimeLong(int yy, int mm, int dd) {
calendar.clear();
calendar.set(yy, mm - 1, dd, 0, 0, 0);
return calendar.getTimeInMillis();
}
/**
* 用于输入年月日小时分生成long型的时间格式
**/
public static final long getTimeLong(int yy, int mm, int dd, int h, int m) {
calendar.clear();
calendar.set(yy, mm - 1, dd, h, m, 0);
return calendar.getTimeInMillis();
}
/**
* 用于只输入年,月生成long型的时间格式
**/
public static final long getTimeLong(int yy, int mm) {
calendar.clear();
calendar.set(yy, mm - 1, 0, 0, 0, 0);
return calendar.getTimeInMillis();
}
/**
* 根据输入的初始日期和新增的月份到新增月份后的总时间
**/
public static final long getTotalTime(Date startTime, long month) {
calendar.setTime(startTime);
calendar.add(Calendar.MONTH, (int) month);
return calendar.getTimeInMillis();
}
/**
* 用于输入年月日小时分秒生成long型的时间格式
**/
public static final long getTimeLong(int yy, int mm, int dd, int h, int m,
int sec) {
calendar.clear();
calendar.set(yy, mm - 1, dd, h, m, sec);
return calendar.getTimeInMillis();
}
/**
* 根据输入一个时间得到和现在的时间差
**/
public static final String getLeaveTime(long tagTime) {
long nowTime = System.currentTimeMillis();
long leaveTime = 0;
if (nowTime > tagTime)
leaveTime = (nowTime - tagTime) / 1000;
else
leaveTime = (tagTime - nowTime) / 1000;
long date = 0;
long hour = 0;
long minute = 0;
// int second = 0;
long dateTime = 0;
long hourTime = 0;
// long minuteTime = 0;
String strDate = "";
String strHour = "";
String strMinute = "";
// String strSecond = "";
date = leaveTime / 86400;
dateTime = date * 86400;
hour = (leaveTime - dateTime) / 3600;
hourTime = hour * 3600;
minute = (leaveTime - dateTime - hourTime) / 60;
// minuteTime = minute*60;
// second = leaveTime - dateTime - hourTime-minuteTime;
if (date > 0)
strDate = date + "天";
if (hour > 0 || (minute > 0 && date > 0))
strHour = hour + "小时";
if (minute > 0)
strMinute = minute + "分";
// if(second>0)
// strSecond = second+"秒";
return strDate + strHour + strMinute;
}
/**
* @author
* @param start
* @param end
* @return
* @throws Exception
*/
public static int getDiffMonth(String start, String end) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
Date startDate = format.parse(start);
Date endDate = format.parse(end);
Calendar s = Calendar.getInstance();
Calendar e = Calendar.getInstance();
s.setTime(startDate);
e.setTime(endDate);
int diff = s.get(Calendar.MONTH) - e.get(Calendar.MONTH);
return diff;
}
/**
* @author
* @param sDate
* @param amount
* @return
* @throws Exception
*/
public static String addMonth(String sDate, int amount) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
Date date = format.parse(sDate);
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.MONTH, amount);
Date aDate = c.getTime();
return format.format(aDate);
}
/**
* @author
* @param sDate
* @param value
* @return
* @throws Exception
*/
public static String getBeforeYearAndMonth(String sDate, int value)
throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
Date date = format.parse(sDate);
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.YEAR, value);
return format.format(c.getTime());
}
/**
*
* @param date
* @return 获取yyyy-MM-dd类型的日期字符串
*/
public static String getSimpleDate(java.util.Date date) {
simpleDateFormat.applyPattern(DateFormatType.SIMPLE_TYPE.getValue());
if (date != null) {
return simpleDateFormat.format(date);
} else {
return "";
}
}
/**
*
* @param date
* @return 获取HH:mm:ss格式时间字符串
*/
public static String getFullTimeStr(java.util.Date date) {
simpleDateFormat.applyPattern(DateFormatType.FUll_TIME_TYPE.value);
if (null != date) {
return simpleDateFormat.format(date);
} else {
return "";
}
}
/**
*
* @param 字符串时间
* @return HH:mm:ss格式时间字符串
* @throws ParseException
*/
public static String getFullTimeStr(String time) {
String t = "";
SimpleDateFormat format = new SimpleDateFormat("HHmmss");
if (null != time && !"".equals(time)) {
try {
Date date = format.parse(time);
t = getFullTimeStr(date);
} catch (Exception e) {
System.out.println("日期转换错误");
}
}
return t;
}
/**
*
* @param date
* yyyyMM格式的日期
* @return yyyyMMdd格式的每月最后一天
* @throws ParseException
*/
public static String getMaxDayOfMonth(String date) {
SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
try {
Date d = format.parse(date);
Calendar ca = Calendar.getInstance();
ca.setTime(d);
int m = ca.getActualMaximum(Calendar.DATE);
return date + m;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
public static void main(String[] args) throws Exception {
// int d = getDiffMonth("201206", "201206");
// System.out.println(getBeforeYearAndMonth("201205", -1));
// System.out.println(addMonth("201205", d));
// Date da = new Date();
// System.out.println(getSimpleDate(da) + " " + getFullTimeStr(da));
// System.out.println(getMaxDayOfMonth("201208"));
System.out.println(getFullTimeStr("162829"));
}
/**
* @description 日期格式化类型枚举
*/
public enum DateFormatType {
/**
* 格式为:yyyy-MM-dd HH:mm:ss
*/
DEFAULT_TYPE("yyyy-MM-dd HH:mm:ss"),
/**
* 格式为:yyyy-MM-dd HH:mm:ss.SSS
*/
FULLALL_TYPE("yyyy-MM-dd HH:mm:ss.SSS"),
/**
* 格式为:yyyy-MM-dd
*/
SIMPLE_TYPE("yyyy-MM-dd"),
/**
* 格式为:yyyyMM
*/
YEAR_MONTH_TYPE("yyyyMM"),
/**
* 格式为:yyyy年MM月
*/
YEARMONTH_TYPE("yyyy年MM月"),
/**
* 格式为:yyyyMMdd
*/
SIMPLE_NOLINE_TYPE("yyyyMMdd"),
/**
* 格式为:yyyyMMddHHmmss
*/
FULL_TYPE("yyyyMMddHHmmss"),
/**
* 格式为:HHmmss
*/
SIMPLE_NOLINE_TIME_TYPE("HHmmss"),
/**
* 格式为:yyyy/MM/dd
*/
SIMPLE_VIRGULE_TYPE("yyyy/MM/dd"),
/**
* 格式为:yyyy/MM/dd
*/
FULL_VIRGULE_TYPE("yyyy/MM/dd HH:mm:ss"),
/**
* 格式为:yyyy年MM月dd日
*/
SIMPLE_CN_TYPE("yyyy年MM月dd日"),
/**
* 格式为:yyyy年M月d日
*/
SIM_CN_TYPE("yyyy年M月d日"),
/**
* 格式为:M月d日
*/
SI_CN_TYPE("M月d日"),
/**
* 格式为:yyyy年MM月dd日 HH时mm分ss秒
*/
FULL_CN_TYPE("yyyy年MM月dd日 HH时mm分ss秒"),
/**
* 格式为:HH:mm:ss
*/
FUll_TIME_TYPE("HH:mm:ss"),
/**
* 格式为:HH:mm
*/
HOUR_MINUTE_TIME_TYPE("HH:mm");
private final String value;
DateFormatType(String formatStr) {
this.value = formatStr;
}
/**
*
* @description 获取指定日期类型
* @return
*/
public String getValue() {
return value;
}
}
/**
* @description 获取所有的日期格式化类型
* @return String[]
*/
public static String[] getAllFormatTypes() {
DateFormatType[] types = DateFormatType.values();
List<String> values = new ArrayList<String>();
for (DateFormatType type : types) {
values.add(type.getValue());
}
return values.toArray(new String[values.size()]);
}
/***
* 得到传入的两个时间之间相隔的天数
*
* @param startday
* @param endday
* @return
*/
public static int getIntervalDays(Date startday, Date endday) {
if (startday.after(endday)) {
Date cal = startday;
startday = endday;
endday = cal;
}
long sl = startday.getTime();
long el = endday.getTime();
long ei = el - sl;
return (int) (ei / (1000 * 60 * 60 * 24));
}
public static int getIntervalMonths(Date startday, Date endday) {
Calendar sdate = Calendar.getInstance();
sdate.setTime(startday);
Calendar edate = Calendar.getInstance();
edate.setTime(endday);
int diff = (edate.get(Calendar.YEAR) - sdate.get(Calendar.YEAR)) * 12
+ edate.get(Calendar.MONTH) - sdate.get(Calendar.MONTH);
return diff;
}
public static Date getBeforeDayDate(String date, int day) {
Calendar c = Calendar.getInstance();
c.setTime(DateUtil.parse(date, DateFormatType.SIMPLE_NOLINE_TYPE));
c.add(Calendar.DAY_OF_MONTH, day);
return c.getTime();
}
public static Object format(Object value, DateFormatType dateFormatType) {
if (value instanceof String) {
String s = (String) value;
return DateUtil.format(DateUtil.parse(s, dateFormatType),
dateFormatType);
}
if (value instanceof Date) {
Date s = (Date) value;
return DateUtil.format(s, dateFormatType);
}
return value;
}
}