JAVA个人笔记随记——整理的DateUtil与日期比较

11 篇文章 1 订阅

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)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值