Java Date格式化工具类
整理了项目中常用到的日期及日期格式。
public class DateUtil {
private static Date date = null;
private static DateFormat dateFormat = null;
private static Calendar calendar = null;
/**
* 功能描述:格式化日期
* @param dateStr
* 字符型日期
* @param format
* 格式
* @return Date 日期
*/
public static Date parseDate(String dateStr, String format) {
try {
dateFormat = new SimpleDateFormat(format);
String dt = dateStr.replaceAll("-", "/");
if ((!dt.equals("")) && (dt.length() < format.length())) {
dt += format.substring(dt.length()).replaceAll("[YyMmDdHhSs]", "0");
}
date = (Date) dateFormat.parse(dt);
} catch (Exception e) {
}
return date;
}
/**
* 功能描述:格式化日期
* @param dateStr
* 字符型日期:YYYY-MM-DD 格式
* @return Date
*/
public static Date parseDate(String dateStr) {
return parseDate(dateStr, "yyyy-MM-dd");
}
/**
* 功能描述:格式化输出日期
* @param date
* 日期
* @param format
* 格式
* @return 返回字符型日期
*/
public static String format(Date date, String format) {
String result = "";
try {
if (date != null) {
dateFormat = new SimpleDateFormat(format);
result = dateFormat.format(date);
}
} catch (Exception e) {
}
return result;
}
/**
* 功能描述:格式化日期
* @param date
* 日期
* @return
*/
public static String format(Date date) {
return format(date, "yyyy-MM-dd");
}
/**
* 功能描述:返回年份
* @param date
* 日期
* @return 返回年份
*/
public static int getYear(Date date) {
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
/**
* 功能描述:返回月份
* @param date
* 日期
* @return 返回月份
*/
public static int getMonth(Date date) {
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 功能描述:返回日份
* @param date
* 日期
* @return 返回日份
*/
public static int getDay(Date date) {
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_MONTH);
}
/**
* 功能描述:返回小时
* @param date
* 日期
* @return 返回小时
*/
public static int getHour(Date date) {
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.HOUR_OF_DAY);
}
/**
* 功能描述:返回分钟
* @param date
* 日期
* @return 返回分钟
*/
public static int getMinute(Date date) {
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MINUTE);
}
/**
* 返回秒钟
* @param date
* 日期
* @return 返回秒钟
*/
public static int getSecond(Date date) {
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.SECOND);
}
/**
* 功能描述:返回毫秒
* @param date
* 日期
* @return 返回毫秒
*/
public static long getMillis(Date date) {
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.getTimeInMillis();
}
/**
* 功能描述:返回字符型日期
* @param date
* 日期
* @return 返回字符型日期 yyyy-MM-dd 格式
*/
public static String getDate(Date date) {
return format(date, "yyyy-MM-dd");
}
/**
* 功能描述:获取当前日期
* @param date
* 日期
* @return String 日期字符串 yyyy-MM-dd格式
*/
public static String getNewDate() {
String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
return date;
}
/**
* 功能描述:返回字符型时间
* @param date
* 日期
* @return 返回字符型时间 HH:mm:ss 格式
*/
public static String getTime(Date date) {
return format(date, "HH:mm:ss");
}
/**
* 功能描述:获取当前时间
* @param date
* 日期
* @return String时间 HH:mm:ss 格式
*/
public static String getTNewime() {
Date date = new Date();
return format(date, "HH:mm:ss");
}
/**
* 功能描述:返回字符型日期时间
* @param date
* 日期
* @return 返回字符型日期时间 yyyy/MM/dd HH:mm:ss 格式
*/
public static String getDateTime(Date date) {
return format(date, "yyyy-MM-dd HH:mm:ss");
}
/**
* 功能描述:日期相加
* @param date
* 日期
* @param day
* int 天数
* @return 返回相加后的日期
*/
public static Date addDate(Date date, int day) {
calendar = Calendar.getInstance();
long millis = getMillis(date) + ((long) day) * 24 * 3600 * 1000;
calendar.setTimeInMillis(millis);
return calendar.getTime();
}
/**
* 功能描述:日期相减
* @param date
* 日期
* @param date1
* 日期
* @return 返回相减后的日期
*/
public static int diffDate(Date date, Date date1) {
return (int) ((getMillis(date) - getMillis(date1)) / (24 * 3600 * 1000));
}
/**
* 功能描述:日期相减(保留1位小数)
* @param date
* 日期
* @param date1
* 日期
* @param type
* 决定结果的类型 minute:分钟 hour:小时 day:天数
* @return 返回相减后的日期
*/
public static double diffDate(Date start, Date end, String type) {
double diff = (double) (getMillis(start) - getMillis(end));
double times = 0.0;
if ("minute".equals(type)) {
times = diff / (1000 * 60);
} else if ("hour".equals(type)) {
times = diff / (1000 * 60 * 60);
} else if ("day".equals(type)) {
times = diff / (1000 * 60 * 60 * 24);
}
BigDecimal bg = new BigDecimal(times);
double hours = bg.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
return hours;
}
/**
* 功能描述:返回年龄
* @param date
* 日期
* @param date1
* 日期
* @return 返回相减后的日期
*/
public static String diffAge(String strs) {
Date date = new Date();
Date date1 = parseDate(strs);
return (getYear(date) - getYear(date1)) + "";
}
/**
* 功能描述:取得指定月份的第一天
* @param strdate
* 字符型日期
* @return String yyyy-MM-dd 格式
*/
public static String getMonthBegin(String strdate) {
date = parseDate(strdate);
return format(date, "yyyy-MM") + "-01";
}
/**
* 功能描述:取得指定月份的最后一天
* @param strdate
* 字符型日期
* @return String 日期字符串 yyyy-MM-dd格式
*/
public static String getMonthEnd(String strdate) {
date = parseDate(getMonthBegin(strdate));
calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
return formatDate(calendar.getTime());
}
/**
* 功能描述:常用的格式化日期
* @param date
* 日期
* @return String 日期字符串 yyyy-MM-dd格式
*/
public static String formatDate(Date date) {
return formatDateByFormat(date, "yyyy-MM-dd");
}
/**
* 功能描述:以指定的格式来格式化日期
* @param date
* 日期
* @param format
* 格式
* @return String 日期字符串
*/
public static String formatDateByFormat(Date date, String format) {
String result = "";
if (date != null) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(format);
result = sdf.format(date);
} catch (Exception ex) {
ex.printStackTrace();
}
}
return result;
}
/**
* 获取当前时间 (yyyy-MM-dd HH:mm:ss)
*
*/
public static String getThisDate() {
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
return date;
}
/**
* 获取当前时间 (yyyy-MM-dd HH:mm:ss:SSS)
*/
public static String getThisDateTime() {
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date());
return date;
}
/*
* 返回日期区间
*/
public static int getDataBetween(String start) {
Date newDate = new Date();
DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Date end = null;
try {
end = dateFormat1.parse(start);
} catch (ParseException e) {
return 0;
}
return diffDate(newDate, end);
}
/**
* 返回月份天数
* @param strDate
* @return int
* @throws ParseException
*/
public static int getMonthDay(String strDate) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = new GregorianCalendar();
Date date = sdf.parse(strDate);
calendar.setTime(date);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 返回月份天数
* @param strDate
* @return int
* @throws ParseException
*/
public static int getWeek(String strDate) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(strDate);
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.DAY_OF_WEEK) - 1;
}
/**
* 功能描述:获取当前日期是本年的第几周
* @param today
* 日期
* @return int 周数
*/
public static int getWork(String today) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse(today);
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(date);
return calendar.get(Calendar.WEEK_OF_YEAR);
// System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));
}
/**
*
* @Title: getWeekNo
* @Description: 获取星期 0代表星期日
* @param dt
* @return int
*/
public static int getWeekNo(Date dt) {
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return w;
}
}