import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.xwork.StringUtils;
import cn.sh.cares.core.utils.DateUtils;
/**
* <p>
* Title: FlyDateUtils.java
*</p>
* <p>
* Description:日期工具类
* </p>
*
*/
public class FlyDateUtils extends DateUtils {
private static Map<String, String> weekDays = new HashMap<String, String>();
static {
weekDays.put("0", "星期日");
weekDays.put("1", "星期一");
weekDays.put("2", "星期二");
weekDays.put("3", "星期三");
weekDays.put("4", "星期四");
weekDays.put("5", "星期五");
weekDays.put("6", "星期六");
}
/**
* 功能:获取日期对应的星期中文名
* @param date
* @return
*/
public static String getWeekDayCnOfDate(Date date) {
return weekDays.get(getWeekDayOfDate(date));
}
/**
* 取得给定时间对应的星期
*
* @return
*/
public static String getWeekDayOfDate(Date date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
return "" + (c.get(Calendar.DAY_OF_WEEK) - 1);
}
/**
* 功能:获取两个日期之间的所有日期
*
* @param startDate
* 开始日期
* @param endDate
* 结束日期
* @return
*/
public static List<Date> getIntervalDates(Date startDate, Date endDate) {
List<Date> result = new ArrayList<Date>();
Long intervalDay = getDateInterval(FlyDateUtils.truncateTimeOfDate(startDate), FlyDateUtils
.truncateTimeOfDate(endDate));
if (intervalDay < 0)
return result;
for (Long i = 0L; i <= intervalDay; i++) {
Date currentDate = addDateField(startDate, Calendar.DATE, i
.intValue());
result.add(currentDate);
}
return result;
}
/**
* 功能:获取两个日期之间的所有日期
*
* @param strStartDate
* 开始日期
* @param strEndDate
* 结束日期
* @return
*/
public static List<Date> getIntervalDates(String strStartDate,
String strEndDate) {
Date startDate = parseString(strStartDate);
Date endDate = parseString(strEndDate);
return getIntervalDates(startDate, endDate);
}
/**
*求两个日期差
*
* @param beginDate
* 开始日期
*@param endDate
* 结束日期
*@return 两个日期相差天数
*/
public static Long getDateInterval(Date startDate, Date endDate) {
if (startDate.after(endDate)) {
return -1L;
}
long interval = endDate.getTime() - startDate.getTime();
return interval / (1000 * 60 * 60 * 24);
}
/**
* 功能:求两个日期相差小时数
* @param startDate
* @param endDate
* @return
*/
public static Long getHourInterval(Date startDate, Date endDate){
if(s

tartDate.after(endDate)) {
return -1L;
}
long interval = endDate.getTime() - startDate.getTime();
return interval/(1000*60*60);
}
/**
*求两个日期差(分钟)
*
* @param beginDate
* 开始日期
*@param endDate
* 结束日期
*@return 两个日期相差分钟
*/
public static Long getMinuteInterval(Date startDate, Date endDate) {
long interval = endDate.getTime() - startDate.getTime();
return interval / (1000 * 60);
}
/**
* 功能:获取不带时分秒的时间
* @param sourceDate
* @return
*/
public static Date getShortDate(Date sourceDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String strDate = dateFormat.format(sourceDate);
try {
return dateFormat.parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 功能:返回当前月份第一天
* @return
*/
public static Date getCurrentMonthFristDay(){
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH,1 );
return c.getTime();
}
/**
* 功能:返回当前月份最后一天
* @return
*/
public static Date getCurrentMonthLastDay(){
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 1);
c.set(Calendar.DAY_OF_MONTH,1);
c.add(Calendar.DATE, -1);
return c.getTime();
}
/**
* 功能:返回参数所在星期的7天,
* 如,传入日期'2011-06-02'(星期四),
* 则返回20011-06-02所在星期的周日至周一的日期Map:
* {(SUN:'2011-05-29'),(MON:'2011-05-30'),(TUE:'2011-05-31'),(WED:'2011-06-01'),(THU:'2011-06-02'),(FRI:'2011-06-03',(SAT:'2011-06-04')}
* @param date
* @return
*/
public static HashMap<String,Date> getWeekDates(Date date){
HashMap<String,Date> dates = new HashMap<String,Date>();
Calendar c = Calendar.getInstance();
c.setTime(date);
int index = c.get(Calendar.DAY_OF_WEEK);
c.add(Calendar.DAY_OF_WEEK, (-1)*(index-1));
dates.put("SUN", c.getTime());
c.add(Calendar.DAY_OF_WEEK, 1);
dates.put("MON", c.getTime());
c.add(Calendar.DAY_OF_WEEK, 1);
dates.put("TUE", c.getTime());
c.add(Calendar.DAY_OF_WEEK, 1);
dates.put("WED", c.getTime());
c.add(Calendar.DAY_OF_WEEK, 1);
dates.put("THU",c.getTime());
c.add(Calendar.DAY_OF_WEEK, 1);
dates.put("FRI", c.getTime());
c.add(Calendar.DAY_OF_WEEK, 1);
dates.put("SAT", c.getTime());
return dates;
}
// 计算当月有多少天
public static int days(int year, int month) {
int days = 0;
if (month != 2) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
}
} else {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
days = 29;
else
days = 28;
}
return days;
}
/**
* 功能: 取传入参数日期的当月第一天
* @param date
* @return
*/
public static Date getMonthFirstDay(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
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 Date getMonthLastDay(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.add(Calendar.DAY_OF_YEAR, -1);
return cal.getTime();
}
/**
* 功能: 获取星期几,如:一、二
* @param year
* @param month
* @param day
* @return
*/
public static String getChinaWeek(int year, int month, int day){
Calendar cal = Calendar.getInstance();
cal.set(year, month-1, day);
return FlyDateUtils.formatDate(cal.getTime(), "E");
}
/**
* 功能: 平移月份
* @param date
* @param monthNum
* @return
*/
public static Date moveDate(Date date, int monthNum){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, monthNum);
return cal.getTime();
}
/**
* 获取当前日期,不带时分秒
* @return
*/
public static Date getCurrentDate() {
return parseString(formatDate(new Date()));
}
/**
* 分钟转小时
* @param min
* @return
*/
public static String minToHour(int min){
if(min==0)
return "0";
int hour = min/60;
int leftMin = min%60;
String minStr = leftMin<10?"0"+leftMin:leftMin+"";
return hour+":"+minStr;
}
/**
* 功能: 判断两个日期的间隔天数是否超过参数值
* 超过返回true 未超过返回false
* @param beforeDate 前一日期
* @param lastDate 后一日期
* @param days 间隔天数
* @return
*/
public static Boolean checkDistanceDay(Date beforeDate, Date lastDate, int days) {
long interval = 0l;
if(beforeDate.before(lastDate)){
interval = lastDate.getTime() - beforeDate.getTime();
} else {
interval = beforeDate.getTime() - lastDate.getTime();
}
int betweenDays = (int) (interval / (1000 * 60 * 60 * 24));
if(betweenDays > days){
return true;
}else{
return false;
}
}
/**
* 功能: 根据days参数移动日期,days可为正 可为负
* 日期去除时分秒
* @param date
* @param days
* @return
*/
public static Date moveDay(Date date, int days) {
date = FlyDateUtils.truncateTimeOfDate(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DAY_OF_YEAR, days);
return cal.getTime();
}
/**
* 功能:获取Date中
某个属性的值
* @param date
* @param field java.util.Calendar类中定义
* @return
*/
public static int getDateField(Date date, int field){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(field);
}
/**
* 功能: 根据参数years平移年份
* @param date
* @param years
* @return
*/
public static Date moveYear(Date date, int years) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, years);
return cal.getTime();
}
/**
* 功能:根据年份获得这年的最后一天
* @param year
* @return
*/
public static Date getLastDayOfYear(int year){
Calendar cal = Calendar.getInstance();
cal.set(year, 11, 31);
return cal.getTime();
}
/**
* 功能:根据年份获得这年的第一天
* @param year
* @return
*/
public static Date getFirstDayOfYear(int year){
Calendar cal = Calendar.getInstance();
cal.set(year, 0, 1);
return cal.getTime();
}
/**
* 把分钟转换为小时显示,格式如:2:50表示2小时50分钟
* @param mins
* @return
*/
public static String formatMinutes2Hours(Long mins){
if(mins == null || mins.longValue() == 0)
return "0";
return "" + mins/60 + ":" + StringUtils.leftPad("" + mins%60, 2, "0");
}
/**
* 功能:返回指定年度指定季度的第一天
* @param quarter,{1,2,3,4}
* @param year
* @return
*/
public static Date qetQuarterFirstDay(int quarter,int year){
String firstDateStr = null;
Date firstDate = null;
if(year > 0){
if(quarter>=1&&quarter<=4){
switch(quarter){
case 1:{
firstDateStr = year+"-01-01";
break;
}
case 2:{
firstDateStr = year+"-04-01";
break;
}
case 3:{
firstDateStr = year+"-07-01";
break;
}
case 4:{
firstDateStr = year+"-10-01";
break;
}
default:;
}
}
}
if(firstDateStr != null){
firstDate = parseString(firstDateStr, "yyyy-MM-dd");
}
return firstDate;
}
/**
* 功能:返回指定年度指定季度的最后一天
* @param quarter
* @param year
* @return
*/
public static Date getQuarterLastDay(int quarter,int year){
Date quarterFirstDay = qetQuarterFirstDay(quarter,year);
if(quarterFirstDay != null){
return getQuarterLastDay(quarterFirstDay);
}else
return null;
}
/**
* 功能:返回参数日期所在季度第一天
* @param date
* @return
*/
public static Date getQuarterFirstDay(Date date){
int year = getDateField(date,Calendar.YEAR);
int quarter = getQuarter(date);
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
switch(quarter){
case 1:
{
c.set(Calendar.MONTH, 0);
break;
}
case 2:
{
c.set(Calendar.MONTH, 2);
break;
}
case 3:
{
c.set(Calendar.MONTH, 6);
break;
}
case 4:
{
c.set(Calendar.MONTH, 9);
break;
}
default: ;
}
c.set(Calendar.DAY_OF_MONTH, 1);
return c.getTime();
}
/**
* 功能:返回参数日期所在季度最后一天
* @param date
* @return
*/
public static Date getQuarterLastDay(Date date){
int year = getDateField(date,Calendar.YEAR);
int quarter = getQuarter(date);
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
switch(quarter){
case 1 :
{
c.set(Calendar.MONTH, 3);
break;
}
case 2 :
{
c.set(Calendar.MONTH, 6);
break;
}
case 3 :
{
c.set(Calendar.MONTH, 9);
break;
}
case 4 :
{
c.set(Calendar.YEAR, year+1);
c.set(Calendar.MONTH, 0);
break;
}
default:;
}
c.set(Calendar.DAY_OF_MONTH ,1);
c.add(Calendar.DAY_OF_YEAR, -1);
return c.getTime();
}
/**
* 功能:返回参数日期所在季度,
* 1:第一季度
* 2:第二季度
* 3:第三季度
* 4:第四季度
* @param date
* @return
*/
public static int getQuarter(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
switch(month){
case 0 : return 1;
case 1 : return 1;
case 2 : return 1;
case 3 : return 2;
case 4 : return 2;
case 5 : return 2;
case 6 : return 3;
case 7 : return 3;
case 8 : return 3;
case 9 : return 4;
case 10 : return 4;
case 11 : return 4;
default:;
}
return -1;
}
public static void main(String[] args) {
String dateStr = "2013-12-31";
Date date = FlyDateUtils.parseString(dateStr, "yyyy-MM-dd");
System.out.println("日期:"+dateStr+",第"+getQuarter(date)+"季度,本季度第一天是"+FlyDateUtils.formatDate(getQuarterFirstDay(date),"yyyy-MM-dd")+",最后一天是"+FlyDateUtils.formatDate(FlyDateUtils.getQuarterLastDay(date), "yyyy-MM-dd"));
}
}
爱华网


