使用 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();
}
}