import org.apache.commons.lang3.StringUtils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public final class DateUtils {
/**
* 日期转换成字符串
* @param date
* @param formatStr
* @return
*/
public static String DateToString(Date date, String formatStr){
DateFormat df = new SimpleDateFormat(formatStr);
return df.format(date);
}
/**
* 日期转换成yyyy-MM-dd HH:mm:ss字符串
* @param date
* @return
*/
public static String getStringDate(Date date){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return df.format(date);
}
/**
* 字符串转换成日期
* @param date
* @param formatStr
* @return
*/
public static Date StringToDate(String date, String formatStr) {
DateFormat df = new SimpleDateFormat(formatStr);
try {
return df.parse(date);
} catch (ParseException e) {
//日期格式转换错误
e.printStackTrace();
return null;
}
}
/**
* 时间转换为时/分/秒
* @param longTime
* @return
*/
public static String TimeToString(long longTime){
StringBuilder time = new StringBuilder();
long hours = longTime / 3600;
long minutes = (longTime % 3600) / 60;
long seconds = longTime % 60;
if (hours > 0)
time.append(hours).append("小时");
if (minutes > 0)
time.append(minutes).append("分");
if (seconds > 0)
time.append(seconds).append("秒");
if (hours == 0 && minutes == 0 && seconds == 0)
time.append("0秒");
return time.toString();
}
/**
* 字符串日期加减
* @param dateStr 操作日期
* @param count 加的数量,负数表示减去
* @param field 单位:Calendar.DATE, Calendar.MONTH, Calendar.YEAR
* @return 相加后的日期字符串
*/
public static String DateAdd(String dateStr, int count, int field){
Calendar cd = Calendar.getInstance();
if(StringUtils.isNotBlank(dateStr)){
cd.setTime(StringToDate(dateStr, "yyyy-MM-dd"));
cd.add(field, count);
dateStr = DateToString(cd.getTime(), "yyyy-MM-dd");
}
return dateStr;
}
/**
* 日期相加
* @param date 操作日期
* @param count 加的数量,负数表示减去
* @param field 单位:Calendar.DATE, Calendar.MONTH, Calendar.YEAR
* @return 相加后的日期
*/
public static Date DateAdd(Date date, int count, int field){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(field, count);
return calendar.getTime();
}
/**
* 日期相减获取时间差(毫秒数)
* @param startTime
* @param endTime
* @param formatStr
* @return
*/
public static long DateDiff(String startTime,String endTime,String formatStr){
long timeDiff = 0;
if(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)){
long start_time = StringToDate(startTime,formatStr).getTime();
long end_time = StringToDate(endTime,formatStr).getTime();
timeDiff = Math.abs(start_time - end_time);
}
return timeDiff;
}
/**
* 获取今天之前的days天日期列表
* @param days
* @return
*/
public static List<String> getDateList(int days){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
List dateList = new ArrayList();
for(int i = 0;i<days;i++){
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, 0-(i+1));
String dateStr = DateToString(calendar.getTime(),"yyyy-MM-dd");
dateList.add(dateStr);
}
Collections.reverse(dateList);
return dateList;
}
/**
* 获取今天之前的days天日期列表
* @param days
* @return
*/
public static String[] getDateArray(int days){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
String[] dateArray = new String[days];
for(int i=days;i>0;i--){
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, 0-i);
String dateStr = DateToString(calendar.getTime(),"yyyy-MM-dd");
dateArray[days-i] = dateStr;
}
return dateArray;
}
/**
* 字符串日期人性化显示
* String formatStr
* @param date
* @param formatStr
* @return
*/
public static String friendlyTime(String date, String formatStr){
Date nowdate = StringToDate(DateToString(new Date(),formatStr),formatStr);
Date ondate = StringToDate(date,formatStr);
Long diffTime = (nowdate.getTime() - ondate.getTime()) / (86400000);
String dateStr = "";
switch (diffTime.intValue()){
case 0:
dateStr = "今天";
break;
case 1:
dateStr = "昨天";
break;
case 2:
dateStr = "两天前";
break;
case 3:
dateStr = "三天前";
break;
case 4:
dateStr = "四天前";
break;
case 5:
dateStr = "五天前";
break;
case 6:
dateStr = "六天前";
break;
case 7:
dateStr = "一周前";
break;
default:
DateFormat df = new SimpleDateFormat(formatStr);
dateStr = df.format(date);
}
return dateStr;
}
/**
* 获取日期所在的周
* @param dateStr
* @param formatStr
* @return
*/
public static String weekOfMonth(String dateStr, String formatStr){
Date date = StringToDate(dateStr,formatStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);
return String.valueOf(weekOfMonth);
}
}