/**
* @filename DateUtils.java
* @version www.mindai.com
* @date 2016年5月31日
*/
package com.mjkf.framework.utils.date;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.SimpleTimeZone;
import javax.swing.JOptionPane;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import com.mjkf.framework.utils.string.StringUtils;
/**
* 时间的工具类
*
* @author farrellz
* @date 2016年5月31日
*/
public final class DateUtils extends org.apache.commons.lang.time.DateUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(DateUtils.class);
/**
* 私有化构造器
*/
private DateUtils() {
}
/**
* Default date formate pattern.
*/
public static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
public static SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM");
public static SimpleDateFormat dateFormatDB = new SimpleDateFormat("yyyyMMdd");// 数据库使用的日期格式
public static SimpleDateFormat dataTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static final String Y_M_D = "yyyy-MM-dd";
public static final String Y_M_D_HM = "yyyy-MM-dd HH:mm";
public static final String Y_M_D_HMS = "yyyy-MM-dd HH:mm:ss";
public static final String YMD = "yyyyMMdd";
public static final String YMDHM = "yyyyMMddHHmm";
public static final String YMDHMS = "yyyyMMddHHmmss";
public static final String ymd = "yyyy/MM/dd";
public static final String ymd_HM = "yyyy/MM/dd HH:mm";
public static final String ymd_HMS = "yyyy/MM/dd HH:mm:ss";
/**
* 把字符串转成日期型
*
* @param date
* @param pattern
* @return
*/
public static Date parseDate(final String date, final String pattern) {
if (StringUtils.isEmpty(date)) {
return null;
}
String pat = pattern;
if (StringUtils.isEmpty(pat)) {
pat = DEFAULT_PATTERN;
}
try {
return new SimpleDateFormat(pat).parse(date);
} catch (ParseException e) {
return null;
}
}
/**
* 将日期型转成字符串型
*
* @param date
* @param pattern
* @return
*/
public static String formatDate(Date date, String pattern) {
if (StringUtils.isEmpty(pattern)) {
pattern = DEFAULT_PATTERN;
}
return new SimpleDateFormat(pattern).format(date);
}
/**
* 将日期型转成字符串型
*
* @param date
* @return String
* @author farrellz
* @date 2016年8月3日
*/
public static String formatDate(Date date) {
return new SimpleDateFormat(DEFAULT_PATTERN).format(date);
}
/**
* 获取给定时间的那天的最后时刻
*
* @param day
* 给定时间(em.2011-01-25 22:11:00...)
* @return 给定时间的那天的最后时刻(em.2011-01-25 23:59:59...)
*/
public static Date getEndOfDay(Date day) {
if (day == null)
day = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.set(Calendar.HOUR_OF_DAY, calendar.getMaximum(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, calendar.getMaximum(Calendar.MINUTE));
calendar.set(Calendar.SECOND, calendar.getMaximum(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND, calendar.getMaximum(Calendar.MILLISECOND));
return calendar.getTime();
}
/**
* 获取给定时间的那天的开始时刻
*
* @param day
* 给定时间(em.2011-01-25 22:11:00...)
* @return 给定时间的那天的最后时刻(em.2011-01-25 00:00:00...)
*/
public static Date getStartOfDay(Date day) {
if (day == null)
day = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.set(Calendar.HOUR_OF_DAY, calendar.getMinimum(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, calendar.getMinimum(Calendar.MINUTE));
calendar.set(Calendar.SECOND, calendar.getMinimum(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND, calendar.getMinimum(Calendar.MILLISECOND));
return calendar.getTime();
}
/**
* 获取给定时间的那个月的最后时刻
*
* @param day
* 给定时间(em.2011-01-25 22:11:00...)
* @return 给定时间的那个月的最后时刻(em.2011-01-31 23:59:59...)
*/
public static Date getEndOfMonth(Date day) {
if (day == null)
day = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.set(Calendar.HOUR_OF_DAY, calendar.getMaximum(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, calendar.getMaximum(Calendar.MINUTE));
calendar.set(Calendar.SECOND, calendar.getMaximum(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND, calendar.getMaximum(Calendar.MILLISECOND));
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
return calendar.getTime();
}
/**
* 获取给定时间的那个月的开始时刻
*
* @param day
* 给定时间(em.2011-01-25 22:11:00...)
* @return 给定时间的那个月的开始时刻(em.2011-01-01 00:00:00...)
*/
public static Date getStartOfMonth(Date day) {
if (day == null)
day = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.set(Calendar.HOUR_OF_DAY, calendar.getMinimum(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, calendar.getMinimum(Calendar.MINUTE));
calendar.set(Calendar.SECOND, calendar.getMinimum(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND, calendar.getMinimum(Calendar.MILLISECOND));
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
}
/**
* 获取给定时间的那天的正午时刻
*
* @param day
* 给定时间(em.2011-01-25 22:11:00...)
* @return 给定时间的那天的最后时刻(em.2011-01-25 12:00:00...)
*/
public static Date getNoonOfDay(Date day) {
if (day == null)
day = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, calendar.getMinimum(Calendar.MINUTE));
calendar.set(Calendar.SECOND, calendar.getMinimum(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND, calendar.getMinimum(Calendar.MILLISECOND));
return calendar.getTime();
}
/**
* 获取当前时间
*
* @return
*/
public static Date getNow() {
return new Date();
}
/**
* 获取给定日期的星期数
*
* @param prefix
* 前缀 ep.'星期'
* @param date
* 给定日期 eg.'2012-01-25 23:07:58'
* @return 前缀+(星期数) ep.'星期三'
*/
public static String getDayOfWeek(String prefix, Date date) {
final String dayNames[] = { "日", "一", "二", "三", "四", "五", "六" };
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (dayOfWeek < 0)
dayOfWeek = 0;
return prefix + dayNames[dayOfWeek];
}
/**
* 获取给定日期的星期数(默认前缀:'星期')
*
* @param date
* @return
*/
public static String getDayOfWeek(Date date) {
return getDayOfWeek("星期", date);
}
/**
* 获取当前日历所属的年.
*
* @return 当前日历所属的年.
*/
public static int getCurrentYear() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
return calendar.get(Calendar.YEAR);
}
/**
* 获取当前日历所属的月,月份是从1开始的.
*
* @return 当前日历所属的月.
*/
public static int getCurrentMonth() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 获取间隔给定天数的日期
*
* @param date
* 给定的日期(eg:2015-06-02 12:00)
* @param days
* 间隔的天数,正数是给定时间往后,负数是给定时间往前(eg:-1 or 1)
* @return 计算出来的日期(eg:2015-06-01 12:00 or 2015-06-03 12:00)
*/
public static Date intervalSomeDays(Date date, int days) {
if (date == null)
return date;
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR) + days);
return cal.getTime();
}
/**
* 获取间隔给定月数的日期
*
* @param date
* 给定的日期(eg:2015-06-02 12:00)
* @param months
* 间隔的月数,正数是给定时间往后,负数是给定时间往前(eg:-1 or 1)
* @return 计算出来的日期(eg:2015-05-02 12:00 or 2015-07-02 12:00)
*/
public static Date intervalSomeMonths(Date date, int months) {
if (date == null)
return date;
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + months);
return cal.getTime();
}
/**
* 获取间隔给定月数的日期
*
* @param date
* 给定的日期(eg:2015-06-02 12:00)
* @param years
* 间隔的月数,正数是给定时间往后,负数是给定时间往前(eg:-1 or 1)
* @return 计算出来的日期(eg:2014-06-02 12:00 or 2016-06-02 12:00)
*/
public static Date intervalSomeYears(Date date, int years) {
if (date == null)
return date;
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + years);
return cal.getTime();
}
/**
* 获取当前系统时间
*
* @return long
* @author farrellz
* @date 2016年7月12日
*/
public static long getCurrentTime() {
return System.currentTimeMillis();
}
public Long ConvertToTime(String date) throws Exception {
if (date == null) {
return null;
}
SimpleDateFormat calenderFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// 带时分秒
if (date.length() > 10) {
return (calenderFormat.parse(date)).getTime();
}
return (dateFormat.parse(date)).getTime();
}
/**
* 两时间相减 返回 时间差
*
* @param endTime
* @param startTime
* @return String
* @author farrellz
* @date 2016年8月15日
*/
public static String getSubTwoTime(String endTime, String startTime) {
try {
Date d1 = dataTimeFormat.parse(startTime);
Date d2 = dataTimeFormat.parse(endTime);
long diff = d1.getTime() - d2.getTime();// 这样得到的差值是微秒级别
long days = diff / (1000 * 60 * 60 * 24);
long hours = (diff - days * (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
long minutes = (diff - days * (1000 * 60 * 60 * 24) - hours * (1000 * 60 * 60)) / (1000 * 60);
if (hours < 0) {
hours = new BigDecimal(hours).abs().intValue();
}
if (minutes < 0) {
minutes = new BigDecimal(minutes).abs().intValue();
}
return "" + days + "-" + hours + "-" + minutes;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 两时间相减 返回 时间差
*
* @param endTime
* @param startTime
* @return String
* @author farrellz
* @date 2016年8月15日
*/
public static String getSubTwoTimeYY(String endTime, String startTime) {
try {
Date d1 = dateFormat.parse(startTime);
Date d2 = dateFormat.parse(endTime);
long diff = d1.getTime() - d2.getTime();// 这样得到的差值是微秒级别
long days = diff / (1000 * 60 * 60 * 24);
return "" + days;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 两时间相减 返回
*
* @param startTime
* @param endTime
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getSubTwoTime1(String endTime, String startTime) {
try {
Date d1 = dataTimeFormat.parse(startTime);
Date d2 = dataTimeFormat.parse(endTime);
long diff = d2.getTime() - d1.getTime();// 这样得到的差值是微秒级别
long days = diff / (1000 * 60 * 60 * 24);
long hours = (diff - days * (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
long minutes = (diff - days * (1000 * 60 * 60 * 24) - hours * (1000 * 60 * 60)) / (1000 * 60);
if (hours < 0) {
hours = new BigDecimal(hours).abs().intValue();
}
if (minutes < 0) {
minutes = new BigDecimal(minutes).abs().intValue();
}
return "" + days + "-" + hours + "-" + minutes;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
*
* @param dateTime
* yyyy-MM-dd HH:mm:ss
* @return unix 时间
* @author farrellz
* @date 2016年8月15日
*/
public static String getUnixTimeStamp(String dateTime) {
Calendar c = Calendar.getInstance();
try {
c.setTime(dataTimeFormat.parse(dateTime));
} catch (ParseException e) {
e.printStackTrace();
}
return (c.getTimeInMillis() / 1000) + "";
}
/**
* unix 时间 转换
*
* @param timestampString
* 1252639886
* @param formats
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String gerUnixTime2String(String timestampString, String formats) {
if (StringUtils.isBlank(timestampString) || "null".equals(timestampString)) {
return "";
}
Long timestamp = Long.parseLong(timestampString) * 1000;
String date = new java.text.SimpleDateFormat(formats).format(new java.util.Date(timestamp));
return date;
}
/**
*
* @param dateTime
* yyyy-MM-dd HH:mm:ss
* @return unix 时间
* @author farrellz
* @date 2016年8月15日
*/
public static String getCurrentUnixTimeStamp() {
Calendar c = Calendar.getInstance();
c.setTime(new Date());
return (c.getTimeInMillis() / 1000) + "";
}
/**
* 格式化时间(yyyy-MM-dd HH:mm:ss)
*
* @param date
* @return String
* @author farrellz
* @date 2016年8月15日
*/
public static String formatDateTime(Date date) {
return dataTimeFormat.format(date);
}
/**
* 创建一个"yyyy-MM-dd"日期的格式化对象
*
* @return "yyyy-MM-dd"日期的格式化对象
* @author farrellz
* @date 2016年8月15日
*/
private static SimpleDateFormat newLongYMDFormat() {
return new SimpleDateFormat(DateUtils.Y_M_D);
}
/**
* 创建一个"yyyy-MM-dd HH:mm:ss"日期的格式化对象
*
* @return "yyyy-MM-dd HH:mm:ss"日期的格式化对象
* @author farrellz
* @date 2016年8月15日
*/
private static SimpleDateFormat newLongYMDHMSFormat() {
return new SimpleDateFormat(DateUtils.Y_M_D_HMS);
}
/**
* "yyyyMMddHHmmss"格式的日期转换为"yyyy-MM-dd HH:mm:ss"格式的日期
*
* @param shortYMDHMS
* "yyyyMMddHHmmss"格式的日期
* @return "yyyy-MM-dd HH:mm:ss"格式的日期
* @throws ParseException
* @author farrellz
* @date 2016年8月15日
*/
public static String toLongYMDHMS(String shortYMDHMS) throws ParseException {
return newLongYMDHMSFormat().format(newShortYMDHMSFormat().parse(shortYMDHMS));
}
/**
* 获得"yyyy-MM-dd"格式的当前日期
*
* @return 返回"yyyy-MM-dd"格式的当前日期
* @author farrellz
* @date 2016年8月15日
*/
public static String getLongYMD() {
return newLongYMDFormat().format(new Date());
}
/**
* 2015年12月21日
*
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getLongYMDChina() {
String str = newLongYMDFormat().format(new Date());
return str.split("-")[0] + "年" + str.split("-")[1] + "月" + str.split("-")[2] + "日";
}
/**
* 创建一个"yyyyMMdd"日期的格式化对象
*
* @return "yyyyMMdd"日期的格式化对象
* @author farrellz
* @date 2016年8月15日
*/
private static SimpleDateFormat newShortYMDFormat() {
return new SimpleDateFormat("yyyyMMdd");
}
/**
* 创建一个"yyyyMMddHHmmss"日期的格式化对象
*
* @return "yyyyMMddHHmmss"日期的格式化对象
* @author farrellz
* @date 2016年8月15日
*/
private static SimpleDateFormat newShortYMDHMSFormat() {
return new SimpleDateFormat("yyyyMMddHHmmss");
}
/**
* 获得"yyyyMMddHHmmss"格式的当前日期
*
* @return 返回"yyyyMMddHHmmss"格式的当前时间
* @author farrellz
* @date 2016年8月15日
*/
public static String getShortYMDHMS() {
return newShortYMDHMSFormat().format(new Date());
}
/**
* "yyyyMMdd"格式的日期转换为"yyyy-MM-dd"格式的日期
*
* @param shortYMD
* "yyyyMMdd"格式的日期
* @return "yyyy-MM-dd"格式的日期
* @throws ParseException
* @author farrellz
* @date 2016年8月15日
*/
public static String toLongYMD(String shortYMD) {
try {
return newLongYMDFormat().format(newShortYMDFormat().parse(shortYMD));
} catch (ParseException e) {
e.printStackTrace();
return "";
}
}
/**
*
* 功能:生成日期yyyyMMdd
*
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getDbDate() {
return dateFormatDB.format(new Date());
}
/**
*
* 功能:把日期yyyy-MM-dd格式转换成yyyyMMDD日期格式
*
* @param dateStr
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String convertClientDateToDbDate(String dateStr) {
String dbDateStr = null;
try {
dbDateStr = dateFormatDB.format(dateFormat.parse(dateStr));
} catch (Exception e) {
e.printStackTrace();
}
return dbDateStr;
}
/**
*
* 功能:解析数据库中的日期字符串 格式:yyyy-MM-dd
*
* @param dateStr
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date parseDate(String dateStr) {
Date date = null;
try {
date = dateFormat.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 将UNIX时间转换成标准时间
*
* @param timestampString
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getDate(String timestampString) {
Long timestamp = Long.parseLong(timestampString) * 1000;
String date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date(timestamp));
return date;
}
/**
*
* 功能:格式化日期字符串 例如:2008-8-8 转换为2008-08-08
*
* @param dateStr
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getDateStrFormat(String dateStr) {
try {
Date date = dateFormat.parse(dateStr);
return dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
*
* 功能:格式化日期字符串 例如:2008-8 转换为2008-08
*
* @param dateStr
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getDateStrFormat2(String dateStr) {
try {
Date date = dateFormat2.parse(dateStr);
return dateFormat2.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 2008-8-8 转 20080808
*
* @param dateStr
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getDateStrFormatyyyyMMdd(String dateStr) {
try {
Date date = dateFormat.parse(dateStr);
return dateFormatDB.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
*
* 功能:解析数据库中的时间字符串 格式:yyyy-MM-dd HH:mm:ss
*
* @param dateStr
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date parseDateTime(String dateTimeStr) {
Date date = null;
try {
date = dataTimeFormat.parse(dateTimeStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 计算两个日期之间的天数
*
* @param startDate
* 开始时间
* @param endDate
* 结束时间
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int calcDays(String startDate, String endDate) {
int days = 1;
try {
long start = dateFormat.parse(startDate).getTime();
long end = dateFormat.parse(endDate).getTime();
days = (int) ((end - start) / (24 * 60 * 60 * 1000));
} catch (ParseException e) {
e.printStackTrace();
return -1;
}
return days;
}
/**
* 计算两个日期之间的天数
*
* @param startDate
* 开始时间
* @param endDate
* 结束时间
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int calcDay(String startDate, String endDate) {
int days = 1;
try {
long start = dateFormatDB.parse(startDate).getTime();
long end = dateFormatDB.parse(endDate).getTime();
days = (int) ((end - start) / (24 * 60 * 60 * 1000));
} catch (ParseException e) {
e.printStackTrace();
return -1;
}
return days;
}
/**
* 功能:指定日期加上指定天数
*
* @param date
* 日期
* @param day
* 天数
* @return 返回相加后的日期
* @author farrellz
* @date 2016年8月15日
*/
public static Date addDate(Date date, int day) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(getMillis(date) + ((long) day) * 24 * 3600 * 1000);
return c.getTime();
}
/**
* 功能:指定日期加上指定天数
*
* @param date
* 日期
* @param minute
* 分钟
* @return 返回相加后的日期
* @author farrellz
* @date 2016年8月15日
*/
public static Date addMinute(Date date, int minute) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(getMillis(date) + ((long) minute) * 60 * 1000);
return c.getTime();
}
/**
*
* 功能:添加指定秒杀的时间
*
* @param date
* @param second
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date addSecond(Date date, int second) {
long s = date.getTime();
s = s + second * 1000;
return new Date(s);
}
/**
* 功能:指定日期减去指定天数
*
* @param date
* @param day
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date diffDate(Date date, int day) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(getMillis(date) - ((long) day) * 24 * 3600 * 1000);
return c.getTime();
}
/**
*
* 功能:分钟相差 minute的时间值
*
* @param date
* @param minute
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date getDateByMinuteAdd(Date date, int minute) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MINUTE, minute);
return calendar.getTime();
}
/**
* 功能:两个日期相隔天数
*
* @param startDate
* 开始日期
* @param endDate
* 结束日期
* @return 返回相减后的日期
* @author farrellz
* @date 2016年8月15日
*/
public static int diffDate(Date startDate, Date endDate) {
long endMillis = endDate.getTime();
long startMillis = startDate.getTime();
long s = (endMillis - startMillis) / (24 * 3600 * 1000);
return (int) s;
}
/**
* 功能:传入时间按所需格式返回时间字符串
*
* @param date
* java.util.Date格式
* @param format
* yyyy-MM-dd HH:mm:ss | yyyy年MM月dd日 HH时mm分ss秒
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String format(Date date, String format) {
String result = "";
try {
if (date == null) {
date = new Date();// 如果时间为空,则默认为当前时间
}
if (StringUtils.isBlank(format)) {// 默认格式化形式
format = DateUtils.Y_M_D;
}
SimpleDateFormat df = new SimpleDateFormat(format);
result = df.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 功能:传入时间字符串按所需格式返回时间
*
* @param dateStr
* 时间字符串
* @param format
* 跟传入dateStr时间的格式必须一样 yyyy-MM-dd HH:mm:ss | yyyy年MM月dd日
* HH时mm分ss秒
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date format(String dateStr, String format) {
if (StringUtils.isBlank(dateStr)) {
return new Date();
}
if (StringUtils.isBlank(format)) {
format = DateUtils.Y_M_D;
}
Date date = null;
try {
DateFormat f = new SimpleDateFormat(format);
date = f.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 功能:时间字符串格式转换
*
* @param dateStr
* 时间字符串
* @param format
* 时间字符串的格式
* @param toFormat
* 格式为的格式
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String format(String dateStr, String format, String toFormat) {
return format(format(dateStr, format), toFormat);
}
/**
* 功能:格式化rss的时间 输入:
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String formatRssDate(Date date) {
if (date == null) {
date = new Date();// 如果时间为空,则默认为当前时间
}
SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
SimpleTimeZone zone = new SimpleTimeZone(8, "GMT");
sdf.setTimeZone(zone);
return sdf.format(date);
}
/**
* 功能:返回年
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int getYear(Date date) {
if (date == null) {
date = new Date();
}
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.YEAR);
}
/**
* 功能:返回月
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int getMonth(Date date) {
if (date == null) {
date = new Date();
}
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.MONTH) + 1;
}
/**
* 功能:返回日
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int getDay(Date date) {
if (date == null) {
date = new Date();
}
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.DAY_OF_MONTH);
}
/**
* 功能:返回小时
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int getHour(Date date) {
if (date == null) {
date = new Date();
}
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.HOUR_OF_DAY);
}
/**
* 功能:返回分
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int getMinute(Date date) {
if (date == null) {
date = new Date();
}
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.MINUTE);
}
/**
* 功能:返回星期 1:星期一,2:星期二 ... 6:星期六 7:星期日
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int getChinaWeek(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int week = c.get(Calendar.DAY_OF_WEEK) - 1;
if (week == 0) {
return 7;
} else {
return week;
}
}
/**
* 功能:返回秒
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int getSecond2(Date date) {
if (date == null) {
date = new Date();
}
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.SECOND);
}
/**
* 功能:返回毫秒
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static long getMillis(Date date) {
if (date == null) {
date = new Date();
}
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.getTimeInMillis();
}
/**
* 功能:获取当前月的第一天日期
*
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date getMonFirstDay() {
Date date = new Date();
Calendar c = Calendar.getInstance();
c.set(getYear(date), getMonth(date) - 1, 1);
return c.getTime();
}
/**
* 功能:获取当前月的最后一天日期
*
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date getMonLastDay() {
Date date = new Date();
Calendar c = Calendar.getInstance();
c.set(getYear(date), getMonth(date), 1);
c.setTimeInMillis(c.getTimeInMillis() - (24 * 3600 * 1000));
return c.getTime();
}
/**
* 功能:获取上个月的最后一天日期
*
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date getMonUpDay() {
Date date = new Date();
Calendar c = Calendar.getInstance();
c.set(getYear(date), getMonth(date) - 1, 1);
c.setTimeInMillis(c.getTimeInMillis() - (24 * 3600 * 1000));
return c.getTime();
}
/**
* 获得本月的第一天的日期
*
* @return String
* @author farrellz
* @date 2016年8月15日
*/
public static String getCurrMonthFirstDay() {
Calendar cal = Calendar.getInstance();
String s = (getYear(cal)) + "-" + (getMonth(cal)) + "-01";
return s;
}
/**
* 获得当前月份2016-08
*
* @return String
* @author farrellz
* @date 2016年8月15日
*/
public static String getCurrMonth() {
Calendar cal = Calendar.getInstance();
String s = (getYear(cal)) + "-" + (getMonth(cal));
return getDateStrFormat2(s);
}
/**
* 获得本月的最后一天的日期
*
* @return String
* @author farrellz
* @date 2016年8月15日
*/
public static String getCurrMonthLastDay() {
Calendar cal = Calendar.getInstance();
String s = (getYear(cal)) + "-" + (getMonth(cal)) + "-" + getDays(cal);
return s;
}
/**
* 获得给定日期当月的天数
*
* @param cal
* @return int
* @author farrellz
* @date 2016年8月15日
*/
public static int getDays(Calendar cal) {
return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 获得给定日历的年
*
* @param cal
* @return int
* @author farrellz
* @date 2016年8月15日
*/
public static int getYear(Calendar cal) {
return cal.get(Calendar.YEAR);
}
/**
* 获得给定日历的月
*
* @param cal
* @return int
* @author farrellz
* @date 2016年8月15日
*/
public static int getMonth(Calendar cal) {
return (cal.get(Calendar.MONTH) + 1);
}
/**
* 获得给定日期字符串对应的年
*
* @param date_str
* @param type
* @return int
* @author farrellz
* @date 2016年8月15日
*/
public static int getYear(String date_str, String type) {
return (convertStrToCal(date_str, type).get(Calendar.YEAR));
}
/**
* 日期转日历
*
* @param date
* @return Calendar
* @author farrellz
* @date 2016年8月15日
*/
public static Calendar convertDateToCal(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal;
}
/**
* 字符转换日历(动态格式转换)
*
* @param date_str
* @param type
* @return Calendar
* @author farrellz
* @date 2016年8月15日
*/
public static Calendar convertStrToCal(String date_str, String type) {
Calendar cal = Calendar.getInstance();
cal.setTime(convertStrToDate(date_str, type));
return cal;
}
/**
* 字符转换日期(动态格式转换)
*
* @param date_str
* @param type
* @return Date
* @author farrellz
* @date 2016年8月15日
*/
public static Date convertStrToDate(String date_str, String type) {
SimpleDateFormat dateformat = new SimpleDateFormat(type);
try {
return dateformat.parse(date_str);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 功能:获取当前日期 格式:2008-02-02 23:11:10
*
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getCurrentDateTime() {
Date date = new Date();
return dataTimeFormat.format(date);
}
/**
* 功能:获取当前日期 格式:20101010
*
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getCurrentDate() {
Date date = new Date();
return dateFormat.format(date);
}
/**
* 创建一个"yyyyMM"日期的格式化对象
*
* @return "yyyyMM"日期的格式化对象
* @author farrellz
* @date 2016年8月15日
*/
private static SimpleDateFormat newShortYMFormat() {
return new SimpleDateFormat("yyyyMM");
}
/**
* 获得距离输入月份的diffMonth月的日期
*
* @param month
* "yyyyMM"格式的日期
* @param diffMonth
* 相差的月数
* @return "yyyyMM"格式的日期
* @throws ParseException
* @author farrellz
* @date 2016年8月15日
*/
public static String getShortYMDiffMonth(String month, int diffMonth) {
SimpleDateFormat sdf = newShortYMFormat();
try {
sdf.parse(month);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c = sdf.getCalendar();
c.add(Calendar.MONTH, diffMonth);
return sdf.format(c.getTime());
}
/**
* 获得距离给定日期diffDay天的日期
*
* @param shortYMD
* "yyyyMMdd"格式的日期
* @param diffDay
* 相差的天数
* @return "yyyyMMdd"格式的日期
* @throws ParseException
* @author farrellz
* @date 2016年8月15日
*/
public static String getShortYMDDiffDay(String shortYMD, int diffDay) {
SimpleDateFormat sdf = newShortYMDFormat();
try {
sdf.parse(shortYMD);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c = sdf.getCalendar();
c.add(Calendar.DATE, diffDay);
return sdf.format(c.getTime());
}
/**
* 当前时间加 减days
*
* @param shortYMD
* @param diffDay
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getAddDay(int diffDay) {
SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, diffDay);
return sf.format(c.getTime());
}
/**
* 获取某月份的最后一天
*
* @param shortYM
* 月份
* @return 输入月份的最后一天
* @throws Exception
* @author farrellz
* @date 2016年8月15日
*/
public static String getEndDayOfMonth(String shortYM) {
String month = "";
try {
month = DateUtils.getShortYMDiffMonth(shortYM, 1);
} catch (Exception e) {
// Auto-generated catch block
e.printStackTrace();
}
return DateUtils.getShortYMDDiffDay(month + "01", -1);
}
/**
* 获得"yyyyMMdd"格式的当前日期
*
* @return 返回"yyyyMMdd"格式的当前日期
* @author farrellz
* @date 2016年8月15日
*/
public static String getShortYMD() {
return newShortYMDFormat().format(new Date());
}
/**
* 获得两个日期之间的所有日期列表(包括起始日期和结束日期)
*
* @param startShortYMD
* "yyyyMMdd"格式的起始日期
* @param endShortYMD
* "yyyyMMdd"格式的结束日期
* @return "yyyyMMdd"格式的日期列表
* @throws ParseException
* @author farrellz
* @date 2016年8月15日
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static List getShortYMDList(String startShortYMD, String endShortYMD) throws ParseException {
SimpleDateFormat startDateFormat = newShortYMDFormat();
startDateFormat.parse(startShortYMD);
Calendar startCal = startDateFormat.getCalendar();
SimpleDateFormat endDateFormat = newShortYMDFormat();
endDateFormat.parse(endShortYMD);
Calendar endCal = endDateFormat.getCalendar();
List dateList = new ArrayList();
while (startCal.before(endCal)) {
dateList.add(startDateFormat.format(startCal.getTime()));
startCal.add(Calendar.DATE, 1);
}
if (startCal.getTimeInMillis() == endCal.getTimeInMillis()) {
dateList.add(startDateFormat.format(endCal.getTime()));
}
return dateList;
}
/**
* 获得两个日期之间的所有日期列表(包括起始日期和结束日期)
*
* @param startShortYM
* "yyyyMM"格式的起始日期
* @param endShortYM
* "yyyyMM"格式的结束日期
* @return "yyyyMM"格式的日期列表
* @throws ParseException
* @author farrellz
* @date 2016年8月15日
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static List getShortYMList(String startShortYM, String endShortYM) throws ParseException {
SimpleDateFormat startDateFormat = newShortYMFormat();
startDateFormat.parse(startShortYM);
Calendar startCal = startDateFormat.getCalendar();
SimpleDateFormat endDateFormat = newShortYMFormat();
endDateFormat.parse(endShortYM);
Calendar endCal = endDateFormat.getCalendar();
List dateList = new ArrayList();
while (startCal.before(endCal)) {
dateList.add(startDateFormat.format(startCal.getTime()));
startCal.add(Calendar.MONTH, 1);
}
if (startCal.getTimeInMillis() == endCal.getTimeInMillis()) {
dateList.add(startDateFormat.format(endCal.getTime()));
}
return dateList;
}
/**
* 验证输入的日期是否合法
*
* @param expDate
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static boolean checkExpDate(String expDate) {
int year = Integer.parseInt(expDate.substring(0, 4));
int month = Integer.parseInt(expDate.substring(4, 6));
int day = Integer.parseInt(expDate.substring(6, 8));
if (month > 12 || month < 1) {
return false;
}
int[] monthLengths = new int[] { 0, 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (isLeapYear(year)) {
monthLengths[2] = 29;
} else {
monthLengths[2] = 28;
}
int monthLength = monthLengths[month];
if (day < 1 || day > monthLength) {
return false;
}
return true;
}
/**
* 是否是闰年
*
* @param year
* @return boolean
* @author farrellz
* @date 2016年8月15日
*/
private static boolean isLeapYear(int year) {
return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
}
/**
*
* 方法用途: 结束时间(end)与start时间进行比较
* 实现步骤: 如果相等返回0,如果end大于start返回1,如果end小于start返回-1
*
* @param start
* @param end
* @return
* @throws Exception
* @author farrellz
* @date 2016年8月15日
*/
public static int compareEndAndStart(String start, String end) throws Exception {
long s = 0;
if (8 == start.length()) {
s = dateFormatDB.parse(start).getTime();
} else if (10 == start.length()) {
s = dateFormat.parse(start).getTime();
} else {
s = dataTimeFormat.parse(start).getTime();
}
long e = 0;
if (8 == end.length()) {
e = dateFormatDB.parse(end).getTime();
} else if (10 == end.length()) {
e = dateFormat.parse(end).getTime();
} else {
e = dataTimeFormat.parse(end).getTime();
}
if (e > s) {
return 1;
} else if (e < s) {
return -1;
}
return 0;
}
/**
* 根据传过来的字符串型的date,转换成对应的日期
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date str2Date(String date) {
Date ret = null;
if (date.length() == 10) {
try {
ret = new SimpleDateFormat("yyyy-MM-dd").parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
if (date.length() == 16) {
try {
ret = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
if (date.length() == 19) {
try {
ret = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
if (date.length() == 13) {
try {
ret = new SimpleDateFormat("yyyy-MM-dd HH").parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
if (date.length() == 7) {
try {
ret = new SimpleDateFormat("yyyy-MM").parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
return ret;
}
/**
* 智能转换日期
*
* @param text
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date smartFormat(String text) {
Date date = null;
try {
if (text == null || text.length() == 0) {
date = null;
} else if (text.length() == 10) {
date = formatStringToDate(text, Y_M_D);
} else if (text.length() == 13) {
date = new Date(Long.parseLong(text));
} else if (text.length() == 14) {
date = formatStringToDate(text, YMDHMS);
} else if (text.length() == 16) {
date = formatStringToDate(text, Y_M_D_HM);
} else if (text.length() == 19) {
date = formatStringToDate(text, Y_M_D_HMS);
} else {
throw new IllegalArgumentException("日期长度不符合要求!");
}
} catch (Exception e) {
throw new IllegalArgumentException("日期转换失败!");
}
return date;
}
/**
* 把字符串格式化成日期
*
* @param date
* 需要格式化的时间
* @param format
* 格式化类型
* @return 返回格式化的时间
* @author farrellz
* @date 2016年8月15日
*/
public static Date formatStringToDate(String date, String format) throws Exception {
if (date == null || date.trim().length() < 1) {
throw new Exception("参数[日期]不能为空!");
}
String strFormat = format;
if (StringUtils.isEmpty(strFormat)) {
strFormat = Y_M_D;
if (date.length() > 16) {
strFormat = Y_M_D_HMS;
} else if (date.length() > 10) {
strFormat = Y_M_D_HM;
}
}
SimpleDateFormat sdfFormat = new SimpleDateFormat(strFormat);
// 严格模式
sdfFormat.setLenient(false);
try {
return sdfFormat.parse(date);
} catch (ParseException e) {
throw new Exception(e);
}
}
public static String getSSTimeStamp() {
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SS");
String strddd = sdf.format(d);
return strddd;
}
/**
* 获取当前日期是星期几
*
* @return 当前日期是星期几
* @author farrellz
* @date 2016年8月15日
*/
public static String getWeekOfDate() {
String[] weekDays = { "7", "1", "2", "3", "4", "5", "6" };
Calendar cal = Calendar.getInstance();
// cal.setTime(dt);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return weekDays[w];
}
/**
* 功能:返回上旬/中旬/下旬 1 :上旬 2: 中旬 3: 下旬
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int getEarlyMidLate(Date date) {
int day = getDay(date);
int earlyMidLate = 0;
if (1 <= day && day <= 10) {
earlyMidLate = 1;
}
if (11 <= day && day <= 20) {
earlyMidLate = 2;
}
if (20 < day) {
earlyMidLate = 3;
}
return earlyMidLate;
}
/**
* 将日期转换成Julian日期,即为哪一年的第几天
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static int dateToJulian(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR) % 100;
int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
return year * 1000 + dayOfYear;
}
/**
* 将Julian日期转化为date,即为哪一年的第几天
*
* @param date
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date JulianToDate(int date) {
int year = (date / 1000) + 2000;
int dayOfYear = date % 1000;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.DAY_OF_YEAR, dayOfYear);
return calendar.getTime();
}
/**
* 返回当前月份的第一天
*
* @author gongz
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date currentMonthFirstDay() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置为1号,当前日期既为本月第一天
return calendar.getTime();
}
/**
* 返回当前月份的最后一天
*
* @author gongz
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static Date currentMonthLastDay() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return calendar.getTime();
}
/**
* 计算两个时间相差的天数
*
* @param endDate
* 结束时间
* @param startDate
* 开始时间
* @return int 返回相差的天数
* @author farrellz
* @date 2016年8月15日
*/
public static int statisSubDay(Date endDate, Date startDate) {
Calendar fromCalendar = Calendar.getInstance();
fromCalendar.setTime(startDate);
fromCalendar.set(Calendar.HOUR_OF_DAY, 0);
fromCalendar.set(Calendar.MINUTE, 0);
fromCalendar.set(Calendar.SECOND, 0);
fromCalendar.set(Calendar.MILLISECOND, 0);
Calendar toCalendar = Calendar.getInstance();
toCalendar.setTime(endDate);
toCalendar.set(Calendar.HOUR_OF_DAY, 0);
toCalendar.set(Calendar.MINUTE, 0);
toCalendar.set(Calendar.SECOND, 0);
toCalendar.set(Calendar.MILLISECOND, 0);
Long tempString = (toCalendar.getTime().getTime() - fromCalendar.getTime().getTime()) / (1000 * 60 * 60 * 24);
return Integer.valueOf(tempString.toString());
}
/**
* 时间减去 几小时 返回时间
*
* @param startTime
* @param endTime
* @return
* @author farrellz
* @date 2016年8月15日
*/
public static String getSubTwoDate(String strDate, int a) {
try {
Calendar dar = Calendar.getInstance();
dar.setTime(dataTimeFormat.parse(strDate));
dar.add(java.util.Calendar.HOUR_OF_DAY, -a);
return dataTimeFormat.format(dar.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 功能:判断两个时间是否相等 精确到分
*
* @param strDate
* @param date
* @return boolean
* @author farrellz
* @date 2016年8月15日
*/
public static boolean getCurrentDate(String strDate, Date date) {
SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Calendar dar = Calendar.getInstance();
try {
dar.setTime(dft.parse(strDate));
} catch (ParseException e) {
e.printStackTrace();
}
return dft.format(dar.getTime()).equals(dft.format(date));
}
/**
* 时间加day天
*
* @param d
* 需要计算的时间
* @param day
* @return
* @throws ParseException
* Date
* @author farrellz
* @date 2016年8月15日
*/
public static Date addDate1(Date d, long day) throws ParseException {
long time = d.getTime();
day = day * 24 * 60 * 60 * 1000;
time += day;
return new Date(time);
}
/**
* 获取上个月最后一天的日期
*
* @return Date
* @author farrellz
* @date 2016年8月15日
*/
public static Date getLastMonthDay() {
Calendar calendar = Calendar.getInstance();
int month = calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date strDateTo = calendar.getTime();
return strDateTo;
}
/**
* 获取制定毫秒数之前的日期
* @param timeDiff
* @return
*/
public static String getDesignatedDate(long timeDiff){
SimpleDateFormat format = new SimpleDateFormat(Y_M_D);
long nowTime = System.currentTimeMillis();
long designTime = nowTime - timeDiff;
return format.format(designTime);
}
/**
*
* 获取前几天的日期
*/
public static String getPrefixDate(String count){
Calendar cal = Calendar.getInstance();
int day = 0-Integer.parseInt(count);
cal.add(Calendar.DATE,day); // int amount 代表天数
Date datNew = cal.getTime();
SimpleDateFormat format = new SimpleDateFormat(Y_M_D);
return format.format(datNew);
}
/**
* 日期转换成字符串
* @param date
* @return
*/
public static String dateToString(Date date){
SimpleDateFormat format = new SimpleDateFormat(Y_M_D);
return format.format(date);
}
public static String dateToString(Date date,String pattern){
SimpleDateFormat format = new SimpleDateFormat(pattern);
return format.format(date);
}
/**
* 字符串转换日期
* @param str
* @return
*/
public static Date stringToDate(String str){
//str = " 2008-07-10 19:20:00 " 格式
SimpleDateFormat format = new SimpleDateFormat(Y_M_D);
if(!str.equals("")&&str!=null){
try {
return format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
//java中怎样计算两个时间如:“21:57”和“08:20”相差的分钟数、小时数 java计算两个时间差小时 分钟 秒 .
public void timeSubtract(){
SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date begin = null;
Date end = null;
try {
begin = dfs.parse("2004-01-02 11:30:24");
end = dfs.parse("2004-03-26 13:31:40");
} catch (ParseException e) {
e.printStackTrace();
}
long between = (end.getTime() - begin.getTime()) / 1000;// 除以1000是为了转换成秒
long day1 = between / (24 * 3600);
long hour1 = between % (24 * 3600) / 3600;
long minute1 = between % 3600 / 60;
long second1 = between % 60;
LOGGER.info("" + day1 + "天" + hour1 + "小时" + minute1 + "分"
+ second1 + "秒");
}
/**
* 获取n月后的时间
* @param time
* @param n
* @return Date
* @author farrellz
* @date 2016年9月13日
*/
public static Date getAfterNMonths(long time, int n) {
Calendar calendar = Calendar.getInstance();
Date date = new Date(time);
calendar.setTime(date);
calendar.add(Calendar.MONTH, n);
return new Date(calendar.getTimeInMillis());
}
/**
* 获取上周一的时间
* @return Date
* @author farrellz
* @date 2016年9月26日
*/
public static Date lastMonday(){
Calendar cal = Calendar.getInstance();
int n = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (n == 0) {
n = 7;
}
cal.add(Calendar.DATE, -(7 + (n - 1)));// 上周一的日期
Date monday = cal.getTime();
return dayBegin(monday);
}
/**
* 获取指定时间的那天 00:00:00.000 的时间
* @param date
* @return Date
* @author farrellz
* @date 2016年9月26日
*/
public static Date dayBegin(final Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, c.getMinimum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getMinimum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getMinimum(Calendar.SECOND));
c.set(Calendar.MILLISECOND, c.getMinimum(Calendar.MILLISECOND));
return c.getTime();
}
/**
* 获取指定时间的那天 23:59:59.999 的时间
* @param date
* @return Date
* @author farrellz
* @date 2016年9月26日
*/
public static Date dayEnd(final Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, c.getMaximum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getMaximum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getMaximum(Calendar.SECOND));
c.set(Calendar.MILLISECOND, c.getMaximum(Calendar.MILLISECOND));
return c.getTime();
}
/**
* 获取指定时间的那周 00:00:00.000 的时间
* @param date
* @return Date
* @author farrellz
* @date 2016年9月26日
*/
public static Date weekBegin(final Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
c.set(Calendar.HOUR_OF_DAY, c.getMinimum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getMinimum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getMinimum(Calendar.SECOND));
c.set(Calendar.MILLISECOND, c.getMinimum(Calendar.MILLISECOND));
return c.getTime();
}
/**
* 获取指定时间的那周 23:59:59.999 的时间
* @param date
* @return Date
* @author farrellz
* @date 2016年9月26日
*/
public static Date weekEnd(final Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
c.add(Calendar.WEEK_OF_YEAR, 1);
c.set(Calendar.HOUR_OF_DAY, c.getMaximum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getMaximum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getMaximum(Calendar.SECOND));
c.set(Calendar.MILLISECOND, c.getMaximum(Calendar.MILLISECOND));
return c.getTime();
}
/**
* 获取指定时间的那月 00:00:00.000 的时间
* @param date
* @return Date
* @author farrellz
* @date 2016年9月26日
*/
public static Date monthBegin(final Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH,1);
c.set(Calendar.HOUR_OF_DAY, c.getMinimum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getMinimum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getMinimum(Calendar.SECOND));
c.set(Calendar.MILLISECOND, c.getMinimum(Calendar.MILLISECOND));
return c.getTime();
}
/**
* 获取指定时间的那月 23:59:59.999 的时间
* @param date
* @return Date
* @author farrellz
* @date 2016年9月26日
*/
public static Date monthEnd(final Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH,0);
c.add(Calendar.MONTH, 1);
c.set(Calendar.HOUR_OF_DAY, c.getMaximum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getMaximum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getMaximum(Calendar.SECOND));
c.set(Calendar.MILLISECOND, c.getMaximum(Calendar.MILLISECOND));
return c.getTime();
}
/**
* 获取指定时间的那年 00:00:00.000 的时间
* @param date
* @return Date
* @author farrellz
* @date 2016年9月26日
*/
public static Date yearBegin(final Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_YEAR,1);
c.set(Calendar.HOUR_OF_DAY, c.getMinimum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getMinimum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getMinimum(Calendar.SECOND));
c.set(Calendar.MILLISECOND, c.getMinimum(Calendar.MILLISECOND));
return c.getTime();
}
/**
* 获取指定时间的那年 23:59:59.999 的时间
* @param date
* @return Date
* @author farrellz
* @date 2016年9月26日
*/
public static Date yearEnd(final Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_YEAR,0);
c.add(Calendar.YEAR, 1);
c.set(Calendar.HOUR_OF_DAY, c.getMaximum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getMaximum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getMaximum(Calendar.SECOND));
c.set(Calendar.MILLISECOND, c.getMaximum(Calendar.MILLISECOND));
return c.getTime();
}
/**
* 判断传入的时间是否为今天
* @param date
* @return boolean
* @author farrellz
* @date 2016年9月26日
*/
public static boolean isToday(Date date){
return date.getTime() >= dayBegin(new Date()).getTime() && date.getTime() <= dayEnd(new Date()).getTime();
}
/**
* 判断传入的时间是否为本周的某一天
* @param date
* @return boolean
* @author farrellz
* @date 2016年9月26日
*/
public static boolean isNowWeek(Date date){
return date.getTime() >= weekBegin(new Date()).getTime() && date.getTime() <= weekEnd(new Date()).getTime();
}
/**
* 判断传入的时间是否为本月的某一天
* @param date
* @return boolean
* @author farrellz
* @date 2016年9月26日
*/
public static boolean isNowMonth(Date date){
return date.getTime() >= monthBegin(new Date()).getTime() && date.getTime() <= monthEnd(new Date()).getTime();
}
/**
* 判断传入的时间是否为本年的某一天
* @param date
* @return boolean
* @author farrellz
* @date 2016年9月26日
*/
public static boolean isNowYear(Date date){
return date.getTime() >= yearBegin(new Date()).getTime() && date.getTime() <= yearEnd(new Date()).getTime();
}
public static void main(String[] args) {
System.out.println(getSubTwoTimeYY("2016-04-14 12:00:01", "2016-04-21 12:00:11"));
System.out.println(getSubTwoTime("2016-04-14 11:30:01", "2016-04-21 12:00:11"));
System.out.println(getSubTwoTime1("2016-04-21 12:00:11", "2016-04-14 11:40:01"));
System.out.println(dataTimeFormat.format(getLastMonthDay()));
System.out.println(dataTimeFormat.format(currentMonthLastDay()));
String date=JOptionPane.showInputDialog("请输入:");
String dayBegin = dateToString(dayBegin(new Date()), "yyyy-MM-dd HH:mm:ss sss");
LOGGER.info("今天起始时间{}",dayBegin);
String dayEnd = dateToString(dayEnd(new Date()),"yyyy-MM-dd HH:mm:ss sss");
LOGGER.info("今天结束时间{}",dayEnd);
boolean flag = isToday(stringToDate(date));
LOGGER.info("{}是否为今天{}",date,flag);
String weekBegin =dateToString(weekBegin(new Date()),"yyyy-MM-dd HH:mm:ss sss");
LOGGER.info("本周起始时间{}",weekBegin);
String weekEnd = dateToString(weekEnd(new Date()),"yyyy-MM-dd HH:mm:ss sss");
LOGGER.info("本周结束时间{}",weekEnd);
flag = isNowWeek(stringToDate(date));
LOGGER.info("{}是否是本周的某一天{}",date,flag);
String monthBegin = dateToString(monthBegin(new Date()),"yyyy-MM-dd HH:mm:ss sss");
LOGGER.info("本月起始时间{}",monthBegin);
String monthEnd = dateToString(monthEnd(new Date()),"yyyy-MM-dd HH:mm:ss sss");
LOGGER.info("本月结束时间{}",monthEnd);
flag = isNowMonth(stringToDate(date));
LOGGER.info("{}是否为本月的某一天{}",date,flag);
String yearBegin = dateToString(yearBegin(new Date()),"yyyy-MM-dd HH:mm:ss sss");
LOGGER.info("本年起始时间{}",yearBegin);
String yearEnd = dateToString(yearEnd(new Date()),"yyyy-MM-dd HH:mm:ss sss");
LOGGER.info("本年结束时间{}",yearEnd);
flag = isNowYear(stringToDate(date));
LOGGER.info("{}是否为本年的某一天{}",date,flag);
}
}