376 lines
9.8 KiB
Java
376 lines
9.8 KiB
Java
package com.base.tool;
|
||
|
||
import java.text.ParseException;
|
||
import java.text.SimpleDateFormat;
|
||
import java.util.Calendar;
|
||
import java.util.Date;
|
||
import java.util.GregorianCalendar;
|
||
|
||
import com.amarsoft.are.ARE;
|
||
import com.amarsoft.are.lang.DateX;
|
||
|
||
/**
|
||
* 统一时间日期获取处理类<br/>
|
||
* 主要考虑统一获取日期,方便统一和外围系统联调及其他时间时,引起的取系统时间引起的不一致问题
|
||
* @author yangsong
|
||
* @since 2014/06/19
|
||
*/
|
||
public class DateTool {
|
||
public static final String AMR_NOMAL_DATE_FORMAT = "yyyy/MM/dd";
|
||
/**
|
||
* 获取当前日期,yyyy/MM/dd格式
|
||
* @return
|
||
*/
|
||
public static String getCurDate(){
|
||
return getBaseDate().getDateString();
|
||
}
|
||
|
||
public static String getCurSeason(){
|
||
Calendar cal = Calendar.getInstance();
|
||
int month = cal.get(Calendar.MONTH);
|
||
String returnValue = "";
|
||
switch((int)(month/3)){
|
||
case 0 : returnValue = "第一季度";
|
||
break;
|
||
case 1 : returnValue = "第二季度";
|
||
break;
|
||
case 2 : returnValue = "第三季度";
|
||
break;
|
||
case 3 : returnValue = "第四季度";
|
||
break;
|
||
}
|
||
return returnValue;
|
||
}
|
||
|
||
public static String getCurDateTime(){
|
||
return getBaseDate().getDateString("yyyy/MM/dd HH:mm:ss");
|
||
}
|
||
public static String getCurDateTime(String format){
|
||
return getBaseDate().getDateString(format);
|
||
}
|
||
/**
|
||
* 设置日期格式
|
||
* @return
|
||
*/
|
||
public static String dateFormat(String date){
|
||
DateX dateX = new DateX(date);
|
||
return dateX.getDateString("yyyy年MM月dd日");
|
||
}
|
||
/**
|
||
* 获取基础日期,
|
||
* @return
|
||
*/
|
||
public static DateX getBaseDate(){
|
||
DateX dateX = new DateX(new Date());
|
||
// DateX dateX = new DateX("2014/06/24 19:18:08");
|
||
return dateX;
|
||
}
|
||
|
||
|
||
public static final String INTERVAL_SEASON = "season";
|
||
public static final String INTERVAL_MONTH = "month";
|
||
|
||
/**
|
||
* 获取下一个间隔日期
|
||
* @param invervalType 间隔类型,如下个月,下个季度
|
||
* @param defaultDate 月内日期设定
|
||
* @return
|
||
*/
|
||
public static Date nextIntervalDate (String invervalType, int defaultDate){
|
||
Calendar cal = Calendar.getInstance();
|
||
int month = cal.get(Calendar.MONTH);
|
||
int interval = 0;
|
||
if(invervalType.equals(INTERVAL_SEASON) ){
|
||
interval = (month/3+1)*3 - month;
|
||
}else if(invervalType.equals(INTERVAL_MONTH)){
|
||
interval=1;
|
||
}
|
||
cal.add(Calendar.MONTH, interval);
|
||
cal.set(Calendar.DATE, defaultDate);
|
||
//cal.roll(Calendar.DATE, defaultDate-1);
|
||
return cal.getTime();
|
||
}
|
||
|
||
/**
|
||
* 获取下一个间隔日期 返回字符串yyyy/MM/dd格式
|
||
* @param invervalType
|
||
* @param defaultDate
|
||
* @return
|
||
*/
|
||
public static String nextIntervalDateStr (String invervalType, int defaultDate){
|
||
DateX dateX = new DateX(nextIntervalDate(invervalType,defaultDate));
|
||
return dateX.getDateString();
|
||
|
||
}
|
||
|
||
/**
|
||
* 根据特定的月日,获取当前时间的下一个该日期
|
||
* @param defaultMonth
|
||
* @param defaultDate
|
||
* @return
|
||
*/
|
||
public static Date getNextDate(int defaultMonth , int defaultDate){
|
||
Calendar cal = Calendar.getInstance();
|
||
if(cal.get(Calendar.MONTH) +1 >defaultMonth ||
|
||
(cal.get(Calendar.MONTH) +1 ==defaultMonth && cal.get(Calendar.DATE)>=defaultDate)){
|
||
cal.add(Calendar.YEAR, 1);
|
||
}
|
||
cal.set(Calendar.MONTH, defaultMonth-1);
|
||
cal.set(Calendar.DATE, defaultDate);
|
||
return cal.getTime();
|
||
}
|
||
/**
|
||
* 根据特定的月日,获取当前时间的下一个该日期 返回字符串yyyy/MM/dd格式
|
||
* @param defaultMonth
|
||
* @param defaultDate
|
||
* @return
|
||
*/
|
||
public static String getNextDateString(int defaultMonth , int defaultDate){
|
||
DateX dateX = new DateX(getNextDate(defaultMonth,defaultDate));
|
||
return dateX.getDateString();
|
||
}
|
||
|
||
/**
|
||
* 根据年份,季度数获取日期区间
|
||
* 举例:若当前时间2014/08/06
|
||
* 1.year=2014 seasonCount=2 则 区间为 2014/04/01 - 2014/08/06
|
||
* 2.year=2014 seasonCount=4 则 区间为 2013/10/01 - 2014/08/06
|
||
* 2.year=2013 seasonCount=2 则 区间为 2013/07/01 - 2013/12/31
|
||
* @param year
|
||
* @param seasonCount
|
||
* @return
|
||
*/
|
||
public static String[] getDateRange(int year ,int seasonCount){
|
||
String start="",end="";
|
||
Calendar cal = Calendar.getInstance();
|
||
int nowYear = cal.get(Calendar.YEAR);
|
||
if(nowYear>year){
|
||
cal.set(Calendar.YEAR, year);
|
||
cal.set(Calendar.MONTH, 12);
|
||
cal.set(Calendar.DATE, 31);
|
||
}
|
||
end = new DateX(cal.getTime()).getDateString();
|
||
cal.add(Calendar.MONTH, -((seasonCount-1)*3+cal.get(Calendar.MONTH)%3));
|
||
cal.set(Calendar.DATE, 1);
|
||
start = new DateX(cal.getTime()).getDateString();
|
||
return new String[]{start,end};
|
||
}
|
||
/**
|
||
* 获取一年中的某一季度的日期范围
|
||
* @param year 年份
|
||
* @param season 该年中的季度:1~4
|
||
* @return
|
||
*/
|
||
public static String[] getRangeForSeason(int year ,int season){
|
||
String start="",end="";
|
||
Calendar cal = Calendar.getInstance();
|
||
cal.set(Calendar.YEAR, year);
|
||
cal.set(Calendar.MONTH, season*3-3);
|
||
cal.set(Calendar.DATE, 1);
|
||
start = new DateX(cal.getTime()).getDateString();
|
||
cal.set(Calendar.MONTH, season*3-1);
|
||
cal.set(Calendar.DATE, (season==1 ||season==4) ? 31:30);
|
||
end = new DateX(cal.getTime()).getDateString();
|
||
return new String[]{start,end};
|
||
}
|
||
|
||
/**
|
||
* 把日期类型转化成字符串类型
|
||
* @param date
|
||
* @param format 输出的字符串日期格式
|
||
* @return
|
||
*/
|
||
public static String parseDate2String(Date date, String format){
|
||
return DateX.format(date, format);
|
||
}
|
||
|
||
/**
|
||
* 把日期类型转化成字符串类型
|
||
* @param date
|
||
* @return
|
||
*/
|
||
public static String parseDate2String(Date date){
|
||
return DateX.format(date, AMR_NOMAL_DATE_FORMAT);
|
||
}
|
||
|
||
/**
|
||
* 获取当前日期的日历
|
||
* @param date
|
||
* @param format 输入的字符串日期格式
|
||
* @return
|
||
* @throws Exception
|
||
*/
|
||
public static Calendar getCalendar(String date, String format) {
|
||
Calendar cal = Calendar.getInstance();
|
||
cal.clear();
|
||
try {
|
||
cal.setTime(new SimpleDateFormat(format).parse(date));
|
||
} catch (ParseException e) {
|
||
ARE.getLog("输入日期的格式不正确!").error(e);
|
||
}
|
||
return cal;
|
||
}
|
||
|
||
/**
|
||
* 把字符串类型转化成日期类型
|
||
* @param date
|
||
* @param format 输入的字符串日期格式
|
||
* @return
|
||
* @throws ParseException
|
||
*/
|
||
public static Date parseString2Date(String date, String format) {
|
||
return getCalendar(date, format).getTime();
|
||
}
|
||
|
||
/**
|
||
* 把字符串类型转化成日期类型,默认格式为yyyy/MM/dd
|
||
* @param date
|
||
* @return
|
||
* @throws ParseException
|
||
*/
|
||
public static Date parseString2Date(String date) {
|
||
return parseString2Date(date, AMR_NOMAL_DATE_FORMAT);
|
||
}
|
||
|
||
/**
|
||
* 按给定期限单位进行日期加减
|
||
* @param date
|
||
* @param year
|
||
* @param month
|
||
* @param day
|
||
* @param format
|
||
* @return
|
||
*/
|
||
public static String getRelativeDate(Date date, int year, int month, int day, String format) {
|
||
SimpleDateFormat sdf = new SimpleDateFormat(format);
|
||
GregorianCalendar gc = new GregorianCalendar();
|
||
|
||
gc.setTime(date);
|
||
|
||
gc.add(1, year);
|
||
gc.add(2, month);
|
||
gc.add(5, day);
|
||
|
||
return sdf.format(gc.getTime());
|
||
}
|
||
|
||
/**
|
||
* 按给定期限单位进行日期加减
|
||
* @param date
|
||
* @param year
|
||
* @param month
|
||
* @param day
|
||
* @return
|
||
*/
|
||
public static String getRelativeDate(String date, int year, int month, int day) {
|
||
return getRelativeDate(parseString2Date(date), year, month, day, AMR_NOMAL_DATE_FORMAT);
|
||
}
|
||
|
||
/**
|
||
* 判断两个日期的大小
|
||
* @param dateFir
|
||
* @param dateSec
|
||
* @return
|
||
* 1 dateFir 晚于 dateSec
|
||
* -1 dateFir 早于 dateSec
|
||
* 0 dateFir 等于 dateSec
|
||
* @throws ParseException
|
||
*/
|
||
public static int compareDate(String dateFir, String dateSec){
|
||
Date date1d = parseString2Date(dateFir);
|
||
Date date2d = parseString2Date(dateSec);
|
||
if (date1d.after(date2d))
|
||
return 1;
|
||
if (date1d.before(date2d))
|
||
return -1;
|
||
else
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* 根据日期获取星期几
|
||
* @param date
|
||
* @param type 1 返回数字 2 返回中文 3 返回英文
|
||
* @return
|
||
* @throws ParseException
|
||
*/
|
||
public static String getWeekDay(String date, String type){
|
||
String[] weekDates = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
||
String[] weekDatesE = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
|
||
Calendar cal = getCalendar(date, AMR_NOMAL_DATE_FORMAT);
|
||
if (type.equals("2"))
|
||
return weekDates[cal.get(Calendar.DAY_OF_WEEK) - 1];
|
||
else if (type.equals("3"))
|
||
return weekDatesE[cal.get(Calendar.DAY_OF_WEEK) - 1];
|
||
else
|
||
return String.valueOf(cal.get(Calendar.DAY_OF_WEEK) - 1);
|
||
}
|
||
|
||
/**
|
||
* 获取月末日期
|
||
* @param curDate
|
||
* @return
|
||
* @throws ParseException
|
||
*/
|
||
public static String getMonthLastDate(String curDate){
|
||
Calendar calendar = Calendar.getInstance();
|
||
calendar.setTime(parseString2Date(curDate));
|
||
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||
return parseDate2String(calendar.getTime());
|
||
}
|
||
|
||
/**
|
||
* 获取季末日期
|
||
* @param curDate
|
||
* @return
|
||
* @throws ParseException
|
||
*/
|
||
public static String getSeasonLastDate(String curDate){
|
||
String months[] = {"03","06","09","12"};
|
||
Calendar cal = Calendar.getInstance();
|
||
cal.setTime(parseString2Date(curDate));
|
||
int dateMonth = cal.get(Calendar.MONTH);
|
||
int dateYear = cal.get(Calendar.YEAR);
|
||
String lastMonth = "";
|
||
switch((int)(dateMonth/3)){
|
||
case 0 : lastMonth = months[0];
|
||
break;
|
||
case 1 : lastMonth = months[1];
|
||
break;
|
||
case 2 : lastMonth = months[2];
|
||
break;
|
||
case 3 : lastMonth = months[3];
|
||
break;
|
||
}
|
||
String newDate = dateYear+"/"+lastMonth+"/01";
|
||
return getMonthLastDate(newDate);
|
||
}
|
||
|
||
/**
|
||
* 获取季初日期
|
||
* @param curDate
|
||
* @return
|
||
* @throws ParseException
|
||
*/
|
||
public static String getSeasonBeginDate(String curDate){
|
||
String months[] = {"01","04","07","10"};
|
||
Calendar cal = Calendar.getInstance();
|
||
cal.setTime(parseString2Date(curDate));
|
||
int dateMonth = cal.get(Calendar.MONTH);
|
||
int dateYear = cal.get(Calendar.YEAR);
|
||
String lastMonth = "";
|
||
switch((int)(dateMonth/3)){
|
||
case 0 : lastMonth = months[0];
|
||
break;
|
||
case 1 : lastMonth = months[1];
|
||
break;
|
||
case 2 : lastMonth = months[2];
|
||
break;
|
||
case 3 : lastMonth = months[3];
|
||
break;
|
||
}
|
||
String newDate = dateYear+"/"+lastMonth+"/01";
|
||
return newDate;
|
||
}
|
||
}
|