1、Date日期操作方法
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 org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
public class DateUtil {
/**
* 将Date转为String<br>
* 默认格式 : YYYY-MM-DD
*
* @param date : 待转换日期
* @return String
*/
public static String format(Date date) {
return format(Constants.DATE_FULL_SYMBOL, date);
}
/**
* 将Date转为String<br>
* 默认格式 : YYYY-MM-DD HH:MM:SS
*
* @param date : 待转换日期
* @return String
*/
public static String formatAll(Date date) {
return format(Constants.DATE_TIME_FULL_SYMBOL, date);
}
/**
* 将Date转为String<br>
* 默认格式 : yyyyMMddHHmmssSSS
*
* @param date : 待转换日期
* @return String
*/
public static String formatAllWithMs(Date date) {
return format(Constants.DATE_TIME_FULL_NO_SYMBOL_WITH_MS, date);
}
/**
* 将Date转为给定格式的String
*
* @param pattern : 日期格式
* @param date : 待转换日期
* @return String
*/
public static String format(String pattern, Date date) {
return DateUtil.formatDateTime(pattern, date);
}
/**
* 将String转为Date<br>
* 默认格式 : YYYY-MM-DD
*
* @param string : 待转换日期
* @return Date
*/
public static Date parse(String string) {
return parse(Constants.DATE_FULL_SYMBOL, string);
}
/**
* 将String转为给定格式的Date<br>
* 默认格式 : YYYY-MM-DD HH:MM:SS
*
* @param string : 待转换日期
* @return Date
*/
public static Date parseAll(String string) {
return parse(Constants.DATE_TIME_FULL_SYMBOL, string);
}
/**
* 将String转为给定格式的Date
*
* @param pattern : 日期格式
* @param string : 待转换日期
* @return Date
*/
public static Date parse(String pattern, String string) {
return DateUtil.parse(pattern, string);
}
/**
* 将String原有的日期格式转为给定格式的String
*
* @param newPattern : 新的日期格式
* @param oldPattern : 原有日期格式
* @param string : 待转换日期
* @return String
*/
public static String convert(String newPattern, String oldPattern, String string) {
return format(newPattern, parse(oldPattern, string));
}
/**
* 给定日期为周几
*
* @param date : 日期
* @return boolean
*/
public static Long getWeek(Date date) {
DateFormatSymbols symboles = new DateFormatSymbols(Locale.getDefault());
symboles.setShortWeekdays(new String[] { "", "7", "1", "2", "3", "4", "5", "6" });
SimpleDateFormat sdf = new SimpleDateFormat("E", symboles);
return Long.valueOf(sdf.format(date));
}
/**
* 是否为周一至周五
*
* @param date : 日期
* @return boolean
*/
public static boolean isWeekday(Date date) {
Long w = Long.valueOf(getWeek(date));
return w <= 5L ? true : false;
}
/**
* 是否为周六,日
*
* @param date : 日期
* @return boolean
*/
public static boolean isWeekend(Date date) {
return !isWeekday(date);
}
/**
* 日期加减
*
* @param date : 待加减日期
* @param n : 待加减天数
* @return Date
*/
public static Date add(Date date, int n) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, n);
return calendar.getTime();
}
/**
* 日期加减,相差几天
*
* @param beginDate : 起始日期
* @param endDate : 结束日期
* @return long
*/
public static long sub(Date beginDate, Date endDate) {
long msBeginDate = beginDate.getTime();
long msEndDate = endDate.getTime();
long msSub = msEndDate - msBeginDate;
long days = msSub / Constants.MS_ONE_DAY;
return days;
}
/**
* 时间加减,相差几天
*
* @param beginTime : 起始时间
* @param endTime : 结束时间
* @return long
*/
public static long sub(String beginTime, String endTime) {
Date beginDate = parse(Constants.DATE_FULL_SYMBOL, beginTime);
Date endDate = parse(Constants.DATE_FULL_SYMBOL, endTime);
return sub(beginDate, endDate);
}
/**
* 日期加减,相差几分
*
* @param beginDate : 起始日期
* @param endDate : 结束日期
* @return long
*/
public static long subMin(Date beginDate, Date endDate) {
long msBeginTime = beginDate.getTime();
long msEndTime = endDate.getTime();
long msSub = msEndTime - msBeginTime;
long mins = msSub / Constants.MS_ONE_MIN;
return mins;
}
/**
* 时间加减,相差几分
*
* @param beginTime : 起始时间
* @param endTime : 结束时间
* @return long
*/
public static long subMin(String beginTime, String endTime) {
Date beginDate = parse(Constants.DATE_TIME_FULL_SYMBOL, beginTime);
Date endDate = parse(Constants.DATE_TIME_FULL_SYMBOL, endTime);
return subMin(beginDate, endDate);
}
/**
* 时间加减,相差几秒
*
* @param beginTime : 起始时间
* @param endTime : 结束时间
* @return long
*/
public static long subSec(Date beginDate, Date endDate) {
long msBeginTime = beginDate.getTime();
long msEndTime = endDate.getTime();
long msSub = msEndTime - msBeginTime;
long mins = msSub / 1000;
return mins;
}
/**
* 时间加减,相差几分
*
* @param beginTime : 起始时间
* @param endTime : 结束时间
* @return long
*/
public static long subSec(String beginTime, String endTime) {
Date beginDate = parse(Constants.DATE_TIME_FULL_SYMBOL, beginTime);
Date endDate = parse(Constants.DATE_TIME_FULL_SYMBOL, endTime);
return subSec(beginDate, endDate);
}
/**
* 月份加减
*
* @param date : 待加减日期
* @param n : 待加减月数
* @return Date
*/
public static Date addMonth(Date date, int n) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, n);
return calendar.getTime();
}
/**
* 月份加减
*
* @param dateTime : 待加减日期
* @param n : 待加减月数
* @return Date
*/
public static String addMonth(String dateTime, int n) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(parse(Constants.DATE_YEAR_MONTH, dateTime));
calendar.add(Calendar.MONTH, n);
return format(Constants.DATE_YEAR_MONTH, calendar.getTime());
}
/**
* 获取当前小时
*
* @return Long
*/
public static Long getHour() {
return Long.valueOf(format(Constants.TIME_HOUR, new Date()));
}
/**
* 获取当前月份
*
* @return Long
*/
public static Long getMonth() {
return getMonth(new Date());
}
/**
* 依据给定的日期,获取当前月份
*
* @return Long
*/
public static Long getMonth(Date date) {
return Long.valueOf(format(Constants.DATE_MONTH, date));
}
/**
* 获取当前年份
*
* @return Long
*/
public static Long getYear() {
return getYear(new Date());
}
/**
* 依据给定的日期,获取当前年份
*
* @return Long
*/
public static Long getYear(Date date) {
return Long.valueOf(format(Constants.DATE_YEAR, date));
}
/**
* 获取当前月的每一天
*
* @return List<String>
*/
public static List<String> getDates() {
List<String> l_dates = new ArrayList<String>();
Calendar calendar = Calendar.getInstance(Locale.CHINA);
int days = calendar.getActualMaximum(Calendar.DATE);
// 当前月第一天
Date first = getFirst();
for (int i = 0; i < days; i++) {
l_dates.add(format(add(first, i)));
}
return l_dates;
}
/**
* 获取区间日期的每一天
*
* @param beginTime : 起始日期
* @param endTime : 结束日期
* @return List<String>
*/
public static List<String> getDates(String beginTime, String endTime) {
List<String> l_dates = new ArrayList<String>();
if (StringUtils.isBlank(beginTime) || StringUtils.isBlank(endTime)) {
return l_dates;
}
long size = sub(parse(beginTime), parse(endTime)) + 1;
for (int i = 0; i < size; i++) {
l_dates.add(format(add(parse(beginTime), i)));
}
return l_dates;
}
/**
* 获取当前月第一天
*
* @return Date
*/
public static Date getFirst() {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
}
/**
* 获取当前月最后一天
*
* @return Date
*/
public static Date getLast() {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return calendar.getTime();
}
/**
* 获取当前月第一天
*
* @return String
*/
public static String getFirstTime() {
return format(getFirst());
}
/**
* 获取当前月最后一天
*
* @return String
*/
public static String getLastTime() {
return format(getLast());
}
/**
* 依据给定的日期获取当前月第一天
*
* @return Date
*/
public static Date getFirst(String time) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.set(getYear(parse(Constants.DATE_YEAR_MONTH, time)).intValue(), getMonth(parse(Constants.DATE_YEAR_MONTH, time)).intValue() - 1, 1);
return calendar.getTime();
}
/**
* 依据给定的日期获取当前月最后一天
*
* @return Date
*/
public static Date getLast(String time) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.setTime(parse(Constants.DATE_YEAR_MONTH, time));
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
return calendar.getTime();
}
/**
* 依据给定的日期获取当前月第一天
*
* @return String
*/
public static String getFirstTime(String time) {
return format(getFirst(time));
}
/**
* 依据给定的日期获取当前月最后一天
*
* @return String
*/
public static String getLastTime(String time) {
return format(getLast(time));
}
/**
* 获得指定日期的前一天
*
* @param pattern
* @param string
* @return
*/
public static String getDayBefore(String pattern, String string) {
Calendar c = Calendar.getInstance();
Date date = parse(pattern, string);
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day - 1);
String dayBefore = new SimpleDateFormat(pattern).format(c.getTime());
return dayBefore;
}
/**
* 获得指定日期的后一天
*
* @param pattern
* @param string
* @return
*/
public static String getDayAfter(String pattern, String string) {
Calendar c = Calendar.getInstance();
Date date = parse(pattern, string);
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + 1);
String dayAfter = new SimpleDateFormat(pattern).format(c.getTime());
return dayAfter;
}
}
public class Constants {
public static final String DATE_TIME_FULL_SYMBOL = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_TIME_FULL_SYMBOL_NUM = "yyyyMMddHHmmss";
public static final String DATE_TIME_FULL = "yyyyMMddHH:mm:ss";
public static final String DATE_FULL_SYMBOL = "yyyy-MM-dd";
public static final String DATE_FULL_NO_SYMBOL = "yyyyMMdd";
public static final String DATE_YEAR_MONTH = "yyyy-MM";
public static final String MONTH_DAY = "MM-dd";
public static final String DATE_YEAR = "yyyy";
public static final String DATE_MONTH = "MM";
public static final String TIME_FULL = "HH:mm:ss";
public static final String TIME_HOUR = "HH";
public static final String TIME_BEGIN = " 00:00:00";
public static final String TIME_END = " 23:59:59";
}
2、java.util.Date.compareTo(Date anotherDate) 方法比较两个日期。
声明
以下是java.util.Date.compareTo()方法的声明
public int compareTo(Date anotherDate)
0如果参数日期等于此日期; 如果这个日期在Date参数之前返回一个小于0的值 ; 如果这个日期在Date参数之后返回一个大于0的值参数
anotherDate – 要比较的日期
返回值
异常
NullPointerException – 如果 anotherDate 为 null.
3、public boolean after(Date when)
当且仅当此 Date 对象表示的瞬间比 when 表示的瞬间晚,才返回 true;否则返回 false。
public boolean before(Date when)
当且仅当此 Date 对象表示的瞬间比 when 表示的瞬间早,才返回
true
;否则返回
false
。
public boolean equals(Object obj)
比较两个日期的相等性。当且仅当参数不为
null
,并且是一个表示与此对象相同的时间点(到毫秒)的
Date
对象时,结果才为
true
。
因此,当且仅当
getTime
方法对于两个
Date
对象返回相同的
long
值时,这两个对象才是相等的。
Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false;
Date1.before(Date2),当Date1小于Date2时,返回TRUE,当大于等于时,返回false;
若要校验Date2必须比Date1小,且不能相等时,使用 !Date1.after(Date2)