package com.jeff.tianti.common.util;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DateUtils extends org.apache.commons.lang3.time.DateUtils{
private final static Log LOG = LogFactory.getLog(DateUtils.class);
public final static DateFormat dfDate = new SimpleDateFormat("yyyy-MM-dd");
public final static DateFormat dfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public final static DateFormat serialFormatter = new SimpleDateFormat("yyyyMMddHHmmssSSS");
public final static DateFormat dfLessonDate = new SimpleDateFormat("yyyy-MM-dd HH:mm");
public final static DateFormat dfHm = new SimpleDateFormat("HH:mm");
public final static DateFormat dfYMD = new SimpleDateFormat("yyyyMMdd");
public final static DateFormat dfYMDHMS = new SimpleDateFormat("yyyyMMddHHmmss");
/**
* 查询开始时间
* @param source
* @return
*/
public static Date getStartDate(String source){
if(StringUtils.isNotBlank(source)){
source = source.trim() + " 00:00:00";
return parseDateTime(source);
}
return null;
}
public static Date getStartDate(Date date){
String source = dfDate.format(date);
return getStartDate(source);
}
/**
* 查询结束时间
* @param source
* @return
*/
public static Date getEndDate(String source){
if(StringUtils.isNotBlank(source)){
source = source.trim() + " 23:59:59";
return parseDateTime(source);
}
return null;
}
public static Date getEndDate(Date date){
String source = dfDate.format(date);
return getEndDate(source);
}
/**
*
* @param source
* @return
*/
public static Date parseDateTime(String source){
if(StringUtils.isBlank(source)){
return null;
}
Date date = null;
try {
date = dfDateTime.parse(source.trim());
} catch (ParseException e) {
LOG.error("解析时间异常:["+source+"] " + e.getMessage());
}
return date;
}
/**
*
* @param source
* @return
*/
public static Date parseDate(String source){
if(StringUtils.isBlank(source)){
return null;
}
Date date = null;
try {
date = dfDate.parse(source.trim());
} catch (ParseException e) {
LOG.error("解析时间异常:["+source+"] " + e.getMessage());
}
return date;
}
/**
*
* @param source
* @param pattern
* @return
*/
public static Date parseDate(String source, String pattern){
if(StringUtils.isBlank(source)){
return null;
}
Date date = null;
try {
DateFormat dateFormat = new SimpleDateFormat(pattern);
date = dateFormat.parse(source.trim());
} catch (ParseException e) {
LOG.error("解析时间异常:["+source+"] " + e.getMessage());
}
return date;
}
/**
* 根据当前时间生成序列号
* @return
*/
public synchronized static String serialNumber(){
return serialFormatter.format(new Date());
}
/**
* 月第一天
* @param date
* @return
*/
public static Date getMonthStartDate(Date date){
Date d = new Date(date.getTime());
d = setHours(d, 0);
d = setMinutes(d, 0);
d = setSeconds(d, 1);
return setDays(d, 1);
}
/**
* 月最后一天
* @param date
* @return
*/
public static Date getMonthEndDate(Date date){
GregorianCalendar c = new GregorianCalendar();
c.setTime(date);
int maxMonth = c.getActualMaximum(Calendar.DAY_OF_MONTH);
c.set(Calendar.DAY_OF_MONTH, maxMonth);
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
return c.getTime();
}
/**
* 当前星期的第一天
* @param date
* @return
*/
public static Date getWeekStartDate(Date date){
GregorianCalendar c = new GregorianCalendar(Locale.CHINA);
c.setTime(date);
c.setFirstDayOfWeek(RANGE_WEEK_MONDAY);
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
c.set(Calendar.HOUR_OF_DAY, 00);
c.set(Calendar.MINUTE, 00);
c.set(Calendar.SECOND, 00);
return c.getTime();
}
/**
* 当前星期的最后一天
* @param date
* @return
*/
public static Date getWeekEndDate(Date date){
GregorianCalendar c = new GregorianCalendar(Locale.CHINA);
c.setTime(date);
c.setFirstDayOfWeek(RANGE_WEEK_MONDAY);
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
return c.getTime();
}
public static Date getLessonDate(String source){
if(StringUtils.isBlank(source)){
return null;
}
Date date = null;
try {
date = dfLessonDate.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 两个时间之间相差的月
* @param date1
* @param date2
* @return
* @throws ParseException
*/
public static int getMonthSpace(Date startDate, Date endDate){
int result = 0;
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(startDate);
c2.setTime(endDate);
result = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
return result;
}
/**
* 日期间隔多少天
* @param early
* @param late
* @return
*/
public static final int daysBetween(Date early, Date late) {
java.util.Calendar calst = java.util.Calendar.getInstance();
java.util.Calendar caled = java.util.Calendar.getInstance();
calst.setTime(early);
caled.setTime(late);
//设置时间为0时
calst.set(java.util.Calendar.HOUR_OF_DAY, 0);
calst.set(java.util.Calendar.MINUTE, 0);
calst.set(java.util.Calendar.SECOND, 0);
caled.set(java.util.Calendar.HOUR_OF_DAY, 0);
caled.set(java.util.Calendar.MINUTE, 0);
caled.set(java.util.Calendar.SECOND, 0);
//得到两个日期相差的天数
int days = ((int) (caled.getTime().getTime() / 1000) - (int) (calst
.getTime().getTime() / 1000)) / 3600 / 24;
return days;
}
public static void main(String [] args){
try {
Date currentDate = dfDateTime.parse("2016-10-16 14:19:40");
Date startDate = DateUtils.getWeekStartDate(currentDate);
Date endDate = DateUtils.getWeekEndDate(currentDate);
System.out.println(startDate + "--" + endDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
}