package org.uintec.util;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 。
* <p>
* org.apache.commons.lang.time.DateFormatUtils
*
* @since 1.0.0
*/
public class DateUtil {
/** YYY */
public static final String FORMAT_DATE_YEAR = "yyyy";
/** YYYY-MM */
public static final String FORMAT_DATE_YEAR_MONTH = "yyyy-MM";
/** YYYY-MM-dd */
public static final String FORMAT_DATE = "yyyy-MM-dd";
/** */
public static final String FORMAT_TIME = "HH:mm:ss";
/** */
public static final String FORMAT_DATETIME = "yyyy-MM-dd HH:mm:ss";
/** */
private static Logger logger = LoggerFactory.getLogger(DateUtil.class);
/**
*
*
* @param date
* java.util.Date
* @param format
* null "", DATE
* @return null
*/
public static String date2String(java.util.Date date, String format) {
String result = null;
if (date == null) {
return result;
}
if (StringUtils.isEmpty(format)) {
format = FORMAT_DATE;
}
try {
result = DateFormatUtils.format(date, format);
} catch (Exception ex) {
logger.warn(" , :" + date.toString() + ", :" + format);
}
return result;
}
/**
*
*
* @param str
*
* @param format
* , Blank
* @return null
*/
public static java.util.Date string2Date(String str, String format) {
if (StringUtils.isEmpty(str)) {
return null;
}
Date result = null;
String[] formats = null;
if (StringUtils.isEmpty(format)) {
formats = new String[3];
formats[0] = FORMAT_DATETIME;
formats[1] = FORMAT_DATE;
formats[2] = FORMAT_TIME;
} else {
formats = new String[4];
formats[0] = format;
formats[1] = FORMAT_DATETIME;
formats[2] = FORMAT_DATE;
formats[3] = FORMAT_TIME;
}
try {
result = DateUtils.parseDate(str, formats);
} catch (Exception ex) {
logger.warn(" , :" + str + ", :" + format);
}
return result;
}
/**
* sql
*
* @param str
*
* @param format
* , Blank
* @return null
*/
public static java.sql.Date string2SqlDate(String str, String format) {
return new java.sql.Date(string2Date(str, format).getTime());
}
/**
*
*
* @param ts
*
* @param format
*
* @return
*/
public static String timestamp2String(Timestamp ts, String format) {
return ts == null ? null : date2String(
new java.util.Date(ts.getTime()), format);
}
/**
*
*
* @param str
*
* @param format
* , Blank
* @return null
* @throws Exception
*/
public static Timestamp string2Timestamp(String str, String format) {
return string2Date(str, format) == null ? null : new Timestamp(
string2Date(str, format).getTime());
}
/**
* 。
*
* @param date
*
* @param num
*
* @return
*/
public static java.util.Date addYears(java.util.Date date, int num) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, num);
return cal.getTime();
}
/**
* 。
*
* @param date
*
* @param num
*
* @return
*/
public static java.util.Date addMonths(java.util.Date date, int num) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, num);
return cal.getTime();
}
/**
* 。
*
* @param date
*
* @param num
*
* @return
*/
public static java.util.Date addDays(java.util.Date date, int num) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DAY_OF_YEAR, num);
return cal.getTime();
}
/**
* 。
* @param date
* @param num
* @return
*/
public static java.util.Date addHours(java.util.Date date, int num) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, num);
return cal.getTime();
}
/**
*
* @param date
* @param num
* @return
*/
public static java.util.Date addMinutes(java.util.Date date, int num) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MINUTE, num);
return cal.getTime();
}
/**
* 。
*
* @param date
*
* @return
*/
public static java.util.Date getFirstDateOfYear(java.util.Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_YEAR, cal
.getActualMinimum(Calendar.DAY_OF_YEAR));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}
/**
* 。
*
* @param date
*
* @return
*/
public static java.util.Date getFirstDateOfMonth(java.util.Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, cal
.getActualMinimum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}
/**
* 。
*
* @param date
*
* @return
*/
public static java.util.Date getLastDateOfYear(java.util.Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_YEAR, cal
.getActualMaximum(Calendar.DAY_OF_YEAR));
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
return cal.getTime();
}
/**
* 。
*
* @param date
*
* @return
*/
public static java.util.Date getLastDateOfMonth(java.util.Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, cal
.getActualMaximum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
return cal.getTime();
}
/**
* , : , ……
*
* @param date
*
* @return *
*/
public static String getStringDayOfWeek(Date date) {
String result = "";
if (null != date) {
SimpleDateFormat formatter4 = new SimpleDateFormat("E");
result = formatter4.format(date);
}
return result;
}
/**
*
*
* @param date
*
* @return 1 d1 d2 0 d1 d2 -1 d1 d2
*/
public static int compareDate(Date d1, Date d2) {
return d1.getTime() > d2.getTime() ? 1
: (d1.getTime() < d2.getTime() ? -1 : 0);
}
/**
* ,
*
* @param day1
* @param day2
* @return -1 day1 day2 0 day1,day2 1 day1 day2
*/
public static int compareDay(int day1, int day2) {
if (day1 == day2) {
return 0;
}
if (Math.abs(day1 - day2) > 15) {
if (day1 > day2) {
return -1;
} else {
return 1;
}
} else if (day1 < day2) {
return -1;
} else {
return 1;
}
}
/**
* ,
*
* @param day1
*
* @param day2
*
* @return -2 day1day2 -1 day1day2 0 day1,day2 1 day1day2
*/
public static int compareDay2(int day1, int day2) {
if (day1 == day2) {
return 0;
}
int yesday = Integer.parseInt(DateUtil.date2String(DateUtil.addDays(
new Date(), -1), "dd"));
if (Math.abs(day1 - day2) > 15) {
if (day1 > day2) {
if (day1 == yesday) {
return -1;
} else {
return -2;
}
} else {
return 1;
}
} else if (day1 < day2) {
if (day1 == yesday) {
return -1;
} else {
return -2;
}
} else {
return 1;
}
}
public static void main(String[] args) {
Date date = new Date();
int result = DateUtil.compareDay(31, 1);
// System.out.println(result);
}
}