日期工具类
主要将平时用的最多的日期转换类收集起来,做一下整理,每个方法都有注释进行说明,直接可以复制,通过类名进行调用,有需要的可以看一下。
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
public static final int ACCURACY_SECOND = 1;
public static final int ACCURACY_MINUTE = 2;
public static final int ACCURACY_HOUR = 3;
public static final int ACCURACY_DAY = 4;
public static final int ACCURACY_MONTH = 5;
public static final int ACCURACY_YEAR = 6;
public static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";
public static final String DEFAULT_TIME_HM = "HH:mm";
private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
public static final String DEFAULT_DATE_MONTH = "yyyy年MM月";
public static final String EN_GB_DATE_PATTERN = "dd/MM/yyyy";
public static final String EN_GBA_DATE_PATTERN = "yyyy/MM/dd";
public static String ZH_CN_DATE_PATTERN = "yyyy-MM-dd";
public static String ZH_CN_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static String ZH_CN_DATETIME_PATTERN_NO_SS = "yyyy-MM-dd HH:mm";
public static String ZH_CN_DTP_NO_HOR = "yyyyMMdd HH:mm:ss";
public static String ZH_CN_DP_NO_HOR = "yyyyMMdd";
public static String ZH_CN_DP_NO_TRIM = "yyyyMMddHHmmss";
private static final String ACCURACY_PATTERN_YEAR = "yyyy";
private static final String ACCURACY_PATTERN_MONTH = "yyyyMM";
private static final String ACCURACY_PATTERN_DAY = "yyyyMMdd";
private static final String ACCURACY_PATTERN_HOUR = "yyyyMMddHH";
private static final String ACCURACY_PATTERN_MINUTE = "yyyyMMddHHmm";
private static final String ACCURACY_PATTERN_SECOND = "yyyyMMddHHmmss";
private static String[] parsePatterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
public static String getDate() {
return getDate("yyyy-MM-dd");
}
public static String getDate(String pattern) {
return DateFormatUtils.format(new Date(), pattern);
}
public static String formatDate(Date date, Object... pattern) {
String formatDate = null;
if (pattern != null && pattern.length > 0) {
formatDate = DateFormatUtils.format(date, pattern[0].toString());
} else {
formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
}
return formatDate;
}
public static String formatDateTime(Date date) {
return formatDate(date, "yyyy-MM-dd HH:mm:ss");
}
public static String formatDateT(Date date) {
return formatDate(date, "yyyy-MM-dd");
}
public static String getTime() {
return formatDate(new Date(), "HH:mm:ss");
}
public static String getDateTime() {
return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
}
public static String getYear() {
return formatDate(new Date(), "yyyy");
}
public static String getMonth() {
return formatDate(new Date(), "MM");
}
public static String getDay() {
return formatDate(new Date(), "dd");
}
public static String getWeek() {
return formatDate(new Date(), "E");
}
public static Date parseDate(Object str) {
if (str == null){
return null;
}
try {
return parseDate(str.toString(), parsePatterns);
} catch (ParseException e) {
return null;
}
}
public static long pastDays(Date date) {
long t = new Date().getTime()-date.getTime();
return t/(24*60*60*1000);
}
public static long pastHour(Date date) {
long t = new Date().getTime()-date.getTime();
return t/(60*60*1000);
}
public static long pastMinutes(Date date) {
long t = new Date().getTime()-date.getTime();
return t/(60*1000);
}
public static String formatDateTime(long timeMillis){
long day = timeMillis/(24*60*60*1000);
long hour = (timeMillis/(60*60*1000)-day*24);
long min = ((timeMillis/(60*1000))-day*24*60-hour*60);
long s = (timeMillis/1000-day*24*60*60-hour*60*60-min*60);
long sss = (timeMillis-day*24*60*60*1000-hour*60*60*1000-min*60*1000-s*1000);
return (day>0?day+",":"")+hour+":"+min+":"+s+"."+sss;
}
public static double getDistanceOfTwoDate(Date before, Date after) {
long beforeTime = before.getTime();
long afterTime = after.getTime();
return (afterTime - beforeTime) / (1000 * 60 * 60 * 24);
}
public static String getHourDifferentOfTwoDate(Date before, Date after, int decimalPlace) {
String[] decimalArr = {"0", "0.0", "0.00", "0.000"};
DecimalFormat decimalFormat;
if (decimalPlace == 4) {
decimalFormat = new DecimalFormat("0.00");
} else {
decimalFormat = new DecimalFormat(decimalArr[decimalPlace]);
}
long beforeTime = before.getTime();
long afterTime = after.getTime();
double differentValue = (double)(afterTime - beforeTime) / (1000 * 60 * 60);
String differentStr = decimalFormat.format(differentValue);
if (decimalPlace == 4) {
String beforePoint = differentStr.substring(0, differentStr.indexOf("."));
String afterPoint = differentStr.substring(differentStr.indexOf(".") + 1,differentStr.indexOf(".") + 2);
int afterValue = Integer.valueOf(afterPoint);
if (afterValue >= 5) {
afterValue = 5;
} else {
afterValue = 0;
}
afterPoint = String.valueOf(afterValue);
differentStr = beforePoint + "." + afterPoint;
}
return differentStr;
}
public static List<String> listDatesBetweenTwoDate(Date startDate, Date endDate, String dateFormat) {
List<String> result = new ArrayList<>();
SimpleDateFormat sDateFormat = new SimpleDateFormat(dateFormat);
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(startDate);
tempStart.add(Calendar.DAY_OF_YEAR, 1);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(endDate);
while (tempStart.before(tempEnd)) {
if (tempStart.get(Calendar.DAY_OF_YEAR) < tempEnd.get(Calendar.DAY_OF_YEAR)) {
result.add(sDateFormat.format(tempStart.getTime()));
}
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
return result;
}
public static List<Date> listDatesBetweenTwoDate(Date startDate, Date endDate) {
List<Date> result = new ArrayList<Date>();
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(startDate);
tempStart.add(Calendar.DAY_OF_YEAR, 1);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(endDate);
while (tempStart.before(tempEnd)) {
if (tempStart.get(Calendar.DAY_OF_YEAR) < tempEnd.get(Calendar.DAY_OF_YEAR)) {
result.add(tempStart.getTime());
}
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
return result;
}
public static Date getMaxDate() {
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, 1000);
return c.getTime();
}
public static String calDate(int value,String unit) {
Calendar c = Calendar.getInstance();
if("Y".equals(unit)){
c.add(Calendar.YEAR, value);
}else if ("M".equals(unit)){
c.add(Calendar.MONTH, value);
}else if ("D".equals(unit)){
c.add(Calendar.DATE, value);
}
return formatDate(c.getTime(), "yyyy-MM-dd HH:mm:ss");
}
public static String calDate(String dateStr,int value,String unit) throws ParseException {
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date date =sdf.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
if("Y".equals(unit)){
calendar.add(Calendar.YEAR, value);
}else if ("M".equals(unit)){
calendar.add(Calendar.MONTH, value);
}else if ("D".equals(unit)){
calendar.add(Calendar.DATE, value);
}
return formatDate(calendar.getTime(), "yyyy-MM-dd");
}
public static boolean later(Date date1, Date date2) {
boolean result = false;
if (1 == compare(date1, date2, ACCURACY_DAY)) {
result = true;
}
return result;
}
public static boolean earlier(Date date1, Date date2) {
boolean result = false;
if (-1 == compare(date1, date2, ACCURACY_DAY)) {
result = true;
}
return result;
}
public static boolean equal(Date date1, Date date2) {
boolean result = false;
if (0 == compare(date1, date2, ACCURACY_DAY)) {
result = true;
}
return result;
}
private static int compare(Date date1, Date date2, int accuracy) {
String pattern = DEFAULT_DATE_PATTERN;
switch (accuracy) {
case ACCURACY_YEAR:
pattern = ACCURACY_PATTERN_YEAR;
break;
case ACCURACY_MONTH:
pattern = ACCURACY_PATTERN_MONTH;
break;
case ACCURACY_DAY:
pattern = ACCURACY_PATTERN_DAY;
break;
case ACCURACY_HOUR:
pattern = ACCURACY_PATTERN_HOUR;
break;
case ACCURACY_MINUTE:
pattern = ACCURACY_PATTERN_MINUTE;
break;
case ACCURACY_SECOND:
pattern = ACCURACY_PATTERN_SECOND;
break;
default:
break;
}
Date formatedDate1 = transDateFormat(date1, pattern);
Date formatedDate2 = transDateFormat(date2, pattern);
return formatedDate1.compareTo(formatedDate2);
}
public static Date transDateFormat(Date date, String pattern) {
String dateStr = null;
Date dateResult = null;
if(date != null){
dateStr = getDateStr(date, pattern);
try {
dateResult = org.apache.commons.lang.time.DateUtils.parseDate(dateStr,
new String[] { pattern.toString() });
} catch (ParseException e) {
e.printStackTrace();
}
}
return dateResult;
}
public static String getDateStr(Date date, String pattern) {
DateFormat df = new SimpleDateFormat(pattern);
return df.format(date);
}
public static Date stringTurnDate(String date, String time, String datePattern, String timePattern){
SimpleDateFormat dateformat = new SimpleDateFormat(datePattern + " " + timePattern );
String beforeDate = date + " " + time;
Date afertDate = null;
try {
afertDate = dateformat.parse(beforeDate);
} catch (ParseException e) {
return afertDate;
}
return afertDate;
}
public static boolean isValidDate(String date, String pattern) {
Boolean convertSuccess = true;
SimpleDateFormat format = new SimpleDateFormat(pattern);
if(!"".equals(date) && date != null){
format.setLenient(false);
try {
format.parse(date);
} catch (ParseException e) {
convertSuccess = false;
}
}
return convertSuccess;
}
public static boolean isValidTime(String time, String pattern) {
Boolean convertSuccess = true;
SimpleDateFormat format = new SimpleDateFormat(pattern);
format.setLenient(false);
if(!"".equals(time) && time != null){
try {
format.parse(time);
} catch (ParseException e) {
convertSuccess = false;
}
}
return convertSuccess;
}
public static List<Date[]> CompareDate(Date startDate, Date endDate){
List<Date[]> list =new ArrayList<>();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
String startDateStr =format.format(startDate);
String endDateStr = format.format(endDate);
if(startDateStr.equals(endDateStr)){
Date[] date =new Date[]{startDate,endDate};
list.add(date);
return list;
}
Calendar cDay1 = Calendar.getInstance();
cDay1.setTime(startDate);
Calendar c = Calendar.getInstance();
c.setTime(endDate);
cDay1.set(Calendar.DAY_OF_MONTH, cDay1.getActualMaximum(Calendar.DAY_OF_MONTH));
Date lastDate = cDay1.getTime();
Date[] date1 =new Date[]{startDate,lastDate};
list.add(date1);
int result = c.get(Calendar.MONTH) - cDay1.get(Calendar.MONTH);
System.out.println(result);
Date temp = startDate;
while(result - 1> 0){
Calendar mid1 = Calendar.getInstance();
mid1.setTime(temp);
mid1.add(Calendar.MONTH, 1);
mid1.set(Calendar.DAY_OF_MONTH, mid1.getActualMinimum(Calendar.DAY_OF_MONTH));
temp = mid1.getTime();
Calendar mid2 = Calendar.getInstance();
mid2.setTime(mid1.getTime());
mid2.set(Calendar.DAY_OF_MONTH, mid1.getActualMaximum(Calendar.DAY_OF_MONTH));
Date[] midDate =new Date[]{mid1.getTime(),mid2.getTime()};
list.add(midDate);
result --;
}
c.add(Calendar.MONTH, 0);
c.set(Calendar.DAY_OF_MONTH,1);
Date firstDate = c.getTime();
Date[] date2 =new Date[]{firstDate,endDate};
list.add(date2);
return list;
}
public static void main(String[] args) throws ParseException {
Date startDate = parseDate("2018-03-06 11:25:00");
Date endDate = parseDate("2018-03-06 16:47:00");
getHourDifferentOfTwoDate(startDate,endDate,4);
}
}