工具类:日期工具类

使用 joda time 封装的一些获取日期的工具类,如下:

package com.payroll.common.utils;

import org.joda.time.*;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.util.Date;

/**
 * 获取系统时间及日期
 */
public class DateUtils {
	
	public static final String FMT_Y 		= "yyyy";
	public static final String FMT_M 		= "MM";
	public static final String FMT_D 		= "dd";
	public static final String FMT_H 		= "HH";
	public static final String FMT_MI 		= "mm";
	public static final String FMT_H_MI 	= "HH:mm";
	public static final String FMT_Y_M 		= "yyyy-MM";
	public static final String FMT_YM 		= "yyyyMM";
	public static final String FMT_Y_M_D 	= "yyyy-MM-dd";
	public static final String FMT_YMD 		= "yyyyMMdd";
	public static final String FMT_H_M_S 	= "HH:mm:ss";
	public static final String FMT_HMS 		= "HHmmss";
	public static final String FMT_YMDHMS 	= "yyyyMMddHHmmss";
	public static final String FMT_Y_M_D_H_M_S = "yyyy-MM-dd HH:mm:ss";
	
	/**
	 * 获取指定格式的字符串日期
	 * 
	 * @param date Date时间对象
	 * @return
	 */
	public static String getDate(Date date) {
		return getDate(date, FMT_Y_M_D);
	}
	/**
	 * 获取指定格式的字符串日期
	 * 
	 * @param date Date时间对象
	 * @param format 格式 默认 yyyyMMdd
	 * @return
	 */
	public static String getDate(Date date, String format) {
		return getDateTime(date, CommonUtils.trim(format, FMT_Y_M_D));
	}
	
	/**
	 *  获取当前系统日期字符串
	 * @return
	 */
	public static String getCurrentDate() {
		return getCurrentDate(FMT_Y_M_D);
	}
	
	/**
	 *  获取当前系统日期字符串
	 * @param format 格式 默认 yyyyMMdd
	 * @return
	 */
	public static String getCurrentDate(String format) {
		return getDate(new Date(), CommonUtils.trim(format, FMT_Y_M_D));
	}
	
	/**
	 * 获取指定格式的字符串时间
	 * 
	 * @param date Date时间对象
	 * @return
	 */
	public static String getTime(Date date) {
		return getTime(date, FMT_H_M_S);
	}
	
	/**
	 * 获取指定格式的字符串时间
	 * 
	 * @param date Date时间对象
	 * @param format 格式 默认 HHmmss
	 * @return
	 */
	public static String getTime(Date date, String format) {
		return getDateTime(date, CommonUtils.trim(format, FMT_H_M_S));
	}
	
	/**
	 * 获取当前系统日期字符串
	 * @return
	 */
	public static String getCurrentTime() {
		return getCurrentTime(FMT_H_M_S);
	}
	
	/**
	 * 获取当前系统日期字符串
	 * @param format 格式化 默认HHmmss
	 * @return
	 */
	public static String getCurrentTime(String format) {
		return getTime(new Date(), CommonUtils.trim(format, FMT_H_M_S));
	}
	
	/**
	 * 获取指定格式的字符串日期时间
	 * 
	 * @param date Date时间对象
	 * @return
	 */
	public static String getDateTime(Date date) {
		return getDateTime(date, FMT_Y_M_D_H_M_S);
	}
	
	/**
	 * 获取指定格式的字符串日期时间
	 * @param date Date时间对象
	 * @param format 格式 默认 yyyyMMddHHmmss
	 * @return
	 */
	public static String getDateTime(Date date, String format) {
		if(date == null) { return ""; }
		DateTimeFormatter formatter = DateTimeFormat.forPattern(CommonUtils.trim(format, FMT_Y_M_D_H_M_S));
		DateTime dateTime = new DateTime(date);
		return dateTime.toString(formatter);
	}
	
	/**
	 * 获取指定格式的字符串日期时间
	 * @param format 格式 默认 yyyyMMddHHmmss
	 * @return
	 */
	public static String getCurrentDateTime() {
		return getCurrentDateTime(FMT_Y_M_D_H_M_S);
	}
	
	/**
	 * 获取指定格式的字符串日期时间
	 * @param format 格式 默认 yyyyMMddHHmmss
	 * @return
	 */
	public static String getCurrentDateTime(String format) {
		return getDateTime(new Date(), CommonUtils.trim(format, FMT_Y_M_D_H_M_S));
	}
	
	/**
	 * 获取指定格式的字符串月份
	 * @param date Date时间对象
	 * @return
	 */
	public static String getMonth(Date date) {
		return getMonth(date, FMT_Y_M);
	}
	
	/**
	 * 获取指定格式的字符串月份
	 * @param date Date时间对象
	 * @param format 格式 默认 yyyyMM
	 * @return
	 */
	public static String getMonth(Date date, String format) {
		return getDateTime(date, CommonUtils.trim(format, FMT_Y_M));
	}
	
	/**
	 * 获取指定格式的字符串月份
	 * @param format 格式 默认 yyyyMM
	 * @return
	 */
	public static String getCurrentMonth() {
		return getCurrentMonth(FMT_Y_M);
	}
	
	/**
	 * 获取指定格式的字符串月份
	 * @param format 格式 默认 yyyyMM
	 * @return
	 */
	public static String getCurrentMonth(String format) {
		return getMonth(new Date(), CommonUtils.trim(format, FMT_Y_M));
	}
	
	/**
	 * 获取指定格式的字符串年份
	 * @param date Date时间对象
	 * @return
	 */
	public static String getYear(Date date) {
		return getYear(date, FMT_Y);
	}
	
	/**
	 * 获取指定格式的字符串年份
	 * @param date Date时间对象
	 * @param format 格式 默认 yyyy
	 * @return
	 */
	public static String getYear(Date date, String format) {
		return getDateTime(date, CommonUtils.trim(format, FMT_Y));
	}
	
	/**
	 * 获取指定格式的字符串年份
	 * @param format 格式 默认 yyyy
	 * @return
	 */
	public static String getCurrentYear() {
		return getCurrentYear(FMT_Y);
	}
	
	/**
	 * 获取指定格式的字符串年份
	 * @param format 格式 默认 yyyy
	 * @return
	 */
	public static String getCurrentYear(String format) {
		return getDateTime(new Date(), CommonUtils.trim(format, FMT_Y));
	}
	
	/**
	 * 从字符串中获取Date
	 * @param date 字符串日期
	 * @param format 格式化 默认yyyyMMddHHmmss
	 * @return
	 */
	public static Date toDate(String date) {
		return toDate(date, FMT_Y_M_D);
	}
	
	/**
	 * 从字符串中获取Date
	 * @param date 字符串日期
	 * @param format 格式化 默认yyyyMMddHHmmss
	 * @return
	 */
	public static Date toDate(String date, String format) {
		if(CommonUtils.isEmpty(CommonUtils.trim(date))) { return null; }
		DateTimeFormatter formatter = DateTimeFormat.forPattern(CommonUtils.trim(format, FMT_Y_M_D));
		DateTime dateTime = formatter.parseDateTime(date);
		return dateTime.toDate();
	}
	
	/**
	 * 从字符串中获取Date
	 * @param date 字符串日期
	 * @param format 格式化 默认yyyyMMddHHmmss
	 * @return
	 */
	public static Date toDateTime(String date) {
		return toDate(date, FMT_Y_M_D_H_M_S);
	}
	
	/**
	 * 从字符串中获取Date
	 * @param date 字符串日期
	 * @param format 格式化 默认yyyyMMddHHmmss
	 * @return
	 */
	public static Date toDateTime(String date, String format) {
		if(CommonUtils.isEmpty(CommonUtils.trim(date))) { return null; }
		DateTimeFormatter formatter = DateTimeFormat.forPattern(CommonUtils.trim(format, FMT_Y_M_D_H_M_S));
		DateTime dateTime = formatter.parseDateTime(date);
		return dateTime.toDate();
	}
	
	
	
	/**
	 * 获取系统秒 -1 
	 * @return
	 */
	public static Date getLastSecond() {
		
		return getSecondBefore(new Date(), -1);
	}
	
	/**
	 * 日期加减 秒
	 * 
	 * @param date 日期
	 * @param miniutes 加减 分钟
	 * @return
	 */
	public static Date getSecondBefore(Date date, int seconds) {
		if(date == null) { return null; }
		DateTime dateTime = new DateTime(date);
		return dateTime.plusSeconds(seconds).toDate();
	}

	/**
	 * 获取系统分钟 -1 
	 * @return
	 */
	public static Date getLastMinute() {
		
		return getMinuteBefore(new Date(), -1);
	}
	
	/**
	 * 日期加减 分钟
	 * 
	 * @param date 日期
	 * @param miniutes 加减 分钟
	 * @return
	 */
	public static Date getMinuteBefore(Date date, int miniutes) {
		if(date == null) { return null; }
		DateTime dateTime = new DateTime(date);
		return dateTime.plusMinutes(miniutes).toDate();
	}
	
	/**
	 * 获取系统昨天日期
	 * @return
	 */
	public static Date getYestoday() {
		
		return getDayBefore(new Date(), -1);
	}
	
	/**
	 * 日期加减 天数
	 * 
	 * @param date 日期
	 * @param days 加减 天数
	 * @return
	 */
	public static Date getDayBefore(Date date, int days) {
		if(date == null) { return null; }
		DateTime dateTime = new DateTime(date);
		return dateTime.plusDays(days).toDate();
	}
	
	/**
	 * 获取系统上个月日期
	 * @return
	 */
	public static Date getLastMonth() {
		
		return getMonthBefore(new Date(), -1);
	}
	
	/**
	 * 日期加减 月份
	 * 
	 * @param date 日期
	 * @param months 加减 月数
	 * @return
	 */
	public static Date getMonthBefore(Date date, int months) {
		if(date == null) { return null; }
		DateTime dateTime = new DateTime(date);
		return dateTime.plusMonths(months).toDate();
	}
	
	/**
	 * 获取系统上个年份
	 * @return
	 */
	public static Date getLastYear() {
		
		return getYearBefore(new Date(), -1);
	}
	
	/**
	 * 日期加减 年份
	 * 
	 * @param date 日期
	 * @param years 加减 年数
	 * @return
	 */
	public static Date getYearBefore(Date date, int years) {
		if(date == null) { return null; }
		DateTime dateTime = new DateTime(date);
		return dateTime.plusYears(years).toDate();
	}
	
	/**
	 * 获取两个日期间的秒数差
	 * 
	 * @param begin 开始日期  格式 yyyy-MM-dd HH:mm:ss
	 * @param end 结束日期 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromSecons(String begin, String end) {
		return diffFromSecons(toDate(begin, FMT_Y_M_D_H_M_S), toDate(end, FMT_Y_M_D_H_M_S));
	}
	
	/**
	 * 获取两个日期间的秒数差
	 * 
	 * @param begin 开始日期 格式 yyyy-MM-dd HH:mm:ss
	 * @param end 结束日期 格式 yyyy-MM-dd HH:mm:ss
	 * @param format 格式化 默认 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromSecons(String begin, String end, String format) {
		return diffFromDays(toDate(begin, CommonUtils.trim(format, FMT_Y_M_D_H_M_S)), toDate(end, CommonUtils.trim(format, FMT_Y_M_D_H_M_S)));
	}
	
	/**
	 * 获取两个日期间的秒数差
	 * 
	 * @param begin 开始日期 格式 yyyy-MM-dd HH:mm:ss
	 * @param format1 格式化 默认 格式 yyyy-MM-dd HH:mm:ss
	 * @param end 结束日期
	 * @param format2 格式化 默认 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromSecons(String begin, String format1, String end, String format2) {
		return diffFromSecons(toDate(begin, CommonUtils.trim(format1, FMT_Y_M_D_H_M_S)), toDate(end, CommonUtils.trim(format2, FMT_Y_M_D_H_M_S)));
	}
	
	/**
	 * 获取两个日期间的秒数差 date1 - date2
	 * @param begin 格式 yyyy-MM-dd HH:mm:ss
	 * @param end 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromSecons(Date begin, Date end) {
		DateTime starts = new DateTime(begin);
		DateTime ends = new DateTime(end);
		return Seconds.secondsBetween(starts, ends).getSeconds();
	}
	
	/**
	 * 获取两个日期间的分钟差
	 * 
	 * @param begin 开始日期  格式 yyyy-MM-dd HH:mm:ss
	 * @param end 结束日期 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromMinutes(String begin, String end) {
		return diffFromMinutes(toDate(begin, FMT_Y_M_D_H_M_S), toDate(end, FMT_Y_M_D_H_M_S));
	}
	
	/**
	 * 获取两个日期间的分钟差
	 * 
	 * @param begin 开始日期 格式 yyyy-MM-dd HH:mm:ss
	 * @param end 结束日期 格式 yyyy-MM-dd HH:mm:ss
	 * @param format 格式化 默认 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromMinutes(String begin, String end, String format) {
		return diffFromMinutes(toDate(begin, CommonUtils.trim(format, FMT_Y_M_D_H_M_S)), toDate(end, CommonUtils.trim(format, FMT_Y_M_D_H_M_S)));
	}
	
	/**
	 * 获取两个日期间的分钟差
	 * 
	 * @param begin 开始日期 格式 yyyy-MM-dd HH:mm:ss
	 * @param format1 格式化 默认 格式 yyyy-MM-dd HH:mm:ss
	 * @param end 结束日期
	 * @param format2 格式化 默认 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromMinutes(String begin, String format1, String end, String format2) {
		return diffFromMinutes(toDate(begin, CommonUtils.trim(format1, FMT_Y_M_D_H_M_S)), toDate(end, CommonUtils.trim(format2, FMT_Y_M_D_H_M_S)));
	}
	
	/**
	 * 获取两个日期间的分钟差 date1 - date2
	 * @param date1 格式 yyyy-MM-dd HH:mm:ss
	 * @param date2 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromMinutes(Date begin, Date end) {
		DateTime starts = new DateTime(begin);
		DateTime ends = new DateTime(end);
		return Minutes.minutesBetween(starts, ends).getMinutes();
	}
	
	/**
	 * 获取两个日期间的小时差
	 * 
	 * @param begin 开始日期  格式 yyyy-MM-dd HH:mm:ss
	 * @param end 结束日期 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromHours(String begin, String end) {
		return diffFromHours(toDate(begin, FMT_Y_M_D_H_M_S), toDate(end, FMT_Y_M_D_H_M_S));
	}
	
	/**
	 * 获取两个日期间的小时差
	 * 
	 * @param begin 开始日期 格式 yyyy-MM-dd HH:mm:ss
	 * @param end 结束日期 格式 yyyy-MM-dd HH:mm:ss
	 * @param format 格式化 默认 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromHours(String begin, String end, String format) {
		return diffFromHours(toDate(begin, CommonUtils.trim(format, FMT_Y_M_D_H_M_S)), toDate(end, CommonUtils.trim(format, FMT_Y_M_D_H_M_S)));
	}
	
	/**
	 * 获取两个日期间的小时差
	 * 
	 * @param begin 开始日期 格式 yyyy-MM-dd HH:mm:ss
	 * @param format1 格式化 默认 格式 yyyy-MM-dd HH:mm:ss
	 * @param end 结束日期
	 * @param format2 格式化 默认 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromHours(String begin, String format1, String end, String format2) {
		return diffFromHours(toDate(begin, CommonUtils.trim(format1, FMT_Y_M_D_H_M_S)), toDate(end, CommonUtils.trim(format2, FMT_Y_M_D_H_M_S)));
	}
	
	/**
	 * 获取两个日期间的小时差 date1 - date2
	 * @param date1 格式 yyyy-MM-dd HH:mm:ss
	 * @param date2 格式 yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static int diffFromHours(Date begin, Date end) {
		DateTime starts = new DateTime(begin);
		DateTime ends = new DateTime(end);
		return Hours.hoursBetween(starts, ends).getHours();
	}
	
	/**
	 * 获取两个日期间的天数差
	 * 
	 * @param begin 开始日期
	 * @param end 结束日期
	 * @return
	 */
	public static int diffFromDays(String begin, String end) {
		return diffFromDays(toDate(begin, FMT_Y_M_D), toDate(end, FMT_Y_M_D));
	}
	
	/**
	 * 获取两个日期间的天数差
	 * 
	 * @param begin 开始日期
	 * @param end 结束日期
	 * @param format 格式化 默认yyyyMMdd
	 * @return
	 */
	public static int diffFromDays(String begin, String end, String format) {
		return diffFromDays(toDate(begin, CommonUtils.trim(format, FMT_Y_M_D)), toDate(end, CommonUtils.trim(format, FMT_Y_M_D)));
	}
	
	/**
	 * 获取两个日期间的天数差
	 * 
	 * @param begin 开始日期
	 * @param format1 格式化 默认yyyyMMdd
	 * @param end 结束日期
	 * @param format2 格式化 默认yyyyMMdd
	 * @return
	 */
	public static int diffFromDays(String begin, String format1, String end, String format2) {
		return diffFromDays(toDate(begin, CommonUtils.trim(format1, FMT_Y_M_D)), toDate(end, CommonUtils.trim(format2, FMT_Y_M_D)));
	}
	
	/**
	 * 获取两个日期间的天数差 date1 - date2
	 * @param begin
	 * @param end
	 * @return
	 */
	public static int diffFromDays(Date begin, Date end) {
		DateTime starts = new DateTime(begin);
		DateTime ends = new DateTime(end);
		return Days.daysBetween(starts, ends).getDays();
	}
	
	/**
	 * 获取两个日期间的月份差
	 * 
	 * @param begin 开始日期
	 * @param end 结束日期
	 * @return
	 */
	public static int diffFromMonths(String begin, String end) {
		return diffFromMonths(toDate(begin, FMT_Y_M_D), toDate(end, FMT_Y_M_D));
	}
	
	/**
	 * 获取两个日期间的月份差
	 * 
	 * @param begin 开始日期
	 * @param end 结束日期
	 * @param format 格式化 默认yyyyMMdd
	 * @return
	 */
	public static int diffFromMonths(String begin, String end, String format) {
		return diffFromMonths(toDate(begin, CommonUtils.trim(format, FMT_Y_M_D)), toDate(end, CommonUtils.trim(format, FMT_Y_M_D)));
	}
	
	/**
	 * 获取两个日期间的月份差
	 * 
	 * @param begin 开始日期
	 * @param format1 格式化 默认yyyyMMdd
	 * @param end 结束日期
	 * @param format2 格式化 默认yyyyMMdd
	 * @return
	 */
	public static int diffFromMonths(String begin, String format1, String end, String format2) {
		return diffFromMonths(toDate(begin, CommonUtils.trim(format1, FMT_Y_M_D)), toDate(end, CommonUtils.trim(format2, FMT_Y_M_D)));
	}
	
	/**
	 * 获取两个日期间的月份差
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static int diffFromMonths(Date begin, Date end) {
		DateTime starts = new DateTime(begin);
		DateTime ends = new DateTime(end);
		return Months.monthsBetween(starts, ends).getMonths();
	}
	
	/**
	 * 获取两个日期间的年份差
	 * 
	 * @param begin 开始日期
	 * @param end 结束日期
	 * @return
	 */
	public static int diffFromYears(String begin, String end) {
		return diffFromYears(toDate(begin, FMT_Y_M_D), toDate(end, FMT_Y_M_D));
	}
	
	/**
	 * 获取两个日期间的年份差
	 * 
	 * @param begin 开始日期
	 * @param end 结束日期
	 * @param format 格式化 默认yyyyMMdd
	 * @return
	 */
	public static int diffFromYears(String begin, String end, String format) {
		return diffFromYears(toDate(begin, CommonUtils.trim(format, FMT_Y_M_D)), toDate(end, CommonUtils.trim(format, FMT_Y_M_D)));
	}
	
	/**
	 * 获取两个日期间的年份差
	 * 
	 * @param begin 开始日期
	 * @param format1 格式化 默认yyyyMMdd
	 * @param end 结束日期
	 * @param format2 格式化 默认yyyyMMdd
	 * @return
	 */
	public static int diffFromYears(String begin, String format1, String end, String format2) {
		return diffFromYears(toDate(begin, CommonUtils.trim(format1, FMT_Y_M_D)), toDate(end, CommonUtils.trim(format2, FMT_Y_M_D)));
	}
	
	/**
	 * 获取两个日期间的年份差
	 * @param begin
	 * @param end
	 * @return
	 */
	public static int diffFromYears(Date begin, Date end) {
		DateTime starts = new DateTime(begin);
		DateTime ends = new DateTime(end);
		return Years.yearsBetween(starts, ends).getYears();
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值