/**
* 获取指定日期的前或者后N天
* @param date <B>指定的日期格式:yyyy-MM-dd</B>
* @param day <B>天数,输入正整数就是后 N天 输入负数则是前N天</B>
* @return <B>String[]</B>
*/
public static String[] getDateDay(String date,int day,String fmtStr){
int count=Math.abs(day)-1;
String[] str= new String[Math.abs(day)];
SimpleDateFormat tempSdf=new SimpleDateFormat(fmtStr);
try {
Date dt=sdfYMD.parse(date);
String source=tempSdf.format(dt);
if(day<0){
str[count]=source;
}else{
str[0]=source;
}
Calendar c = Calendar.getInstance();
c.setTime(dt);
for(int i=1;i<Math.abs(day);i++){
if(day<0){
c.add(Calendar.DATE, -1);
Date d1=c.getTime();
c.setTime(d1);
str[count-i]=tempSdf.format(d1);
}else{
c.add(Calendar.DATE,1);
Date d1=c.getTime();
c.setTime(d1);
str[i]=tempSdf.format(d1);
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return str;
}
/**
* 根据指定的日期获取前或者后的N个月
* @param date <B>日期指定格式:yyyy-MM</B>
* @param month<B>月数,输入正整数就是后 N月 输入负数则是前N月</B>
* @param pattern 返回的格式
* @return <B>String[]</B>
*/
public static String[] getMonths(String date,int month,String pattern){
String[] str = new String[Math.abs(month)];
int count=Math.abs(month)-1;
SimpleDateFormat tempSdf = new SimpleDateFormat(pattern);
try {
Date dt= sdfYM.parse(date);
String source=tempSdf.format(dt);
if(month<0){
str[count]=source;
}else{
str[0]=source;
}
Calendar c = Calendar.getInstance();
c.setTime(dt);
for(int i=1;i<Math.abs(month);i++){
if(month<0){
c.add(Calendar.MONTH, -1);
Date d1=c.getTime();
c.setTime(d1);
str[count-i]=tempSdf.format(d1);
}else{
c.add(Calendar.MONTH, 1);
Date d1=c.getTime();
c.setTime(d1);
str[i]=tempSdf.format(d1);
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return str;
}
/**
* 根据指定的年获得前N年或者后N年
* @param date <B>日期格式:yyyy</B>
* @param year <B>年数 输入正整数就是后N年、输入负整数就是前N年</B>
* @return <B>String[]</B>
*/
public static String[] getYear(String date,int year){
String[] str = new String[Math.abs(year)];
int count=Math.abs(year)-1;
try {
Date dt= sdfYM.parse(date.trim()+"-01");
if(year<0){
str[count]=sdfYM.format(dt).substring(0,sdfYM.format(dt).indexOf("-"));
}else{
str[0]=sdfYM.format(dt).substring(0,sdfYM.format(dt).indexOf("-"));
}
Calendar c = Calendar.getInstance();
c.setTime(dt);
for(int i=1;i<Math.abs(year);i++){
if(year<0){
c.add(Calendar.YEAR, -1);
Date d1=c.getTime();
c.setTime(d1);
str[count-i]=sdfYM.format(d1).substring(0,sdfYM.format(d1).indexOf("-"));
}else{
c.add(Calendar.YEAR, 1);
Date d1=c.getTime();
c.setTime(d1);
str[i]=sdfYM.format(d1).substring(0,sdfYM.format(d1).indexOf("-"));
}
}
} catch (ParseException e) {
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
return str;
}
/**
* 根据指定的日期获取前或者后的N个月
* @param date <B>日期指定格式:yyyy-MM</B>
* @param month<B>月数,输入正整数就是后 N月 输入负数则是前N月</B>
* @param pattern 返回的格式
* @return <B>String</B>
*/
public static String getMonth(String date,int month,String pattern){
SimpleDateFormat tempSdf = new SimpleDateFormat(pattern);
String str="";
try {
Date dt =sdfYM.parse(date);
Calendar c =Calendar.getInstance();
c.setTime(dt);
for(int i=1;i<Math.abs(month);){
if(month<0){
c.add(Calendar.MONTH, -1);
}else{
c.add(Calendar.MONTH, 1);
}
Date d1=c.getTime();
i++;
if(i==Math.abs(month)){
str=tempSdf.format(d1);
}
c.setTime(d1);
}
} catch (ParseException e) {
e.printStackTrace();
}
return str;
}
/**
* 获取指定日期的前或者后N天
* @param date <B>指定的日期格式:yyyy-MM-dd</B>
* @param day <B>天数,输入正整数就是后 N天 输入负数则是前N天</B>
* @return <B> String</B>
*/
public static String getDay(String date,int day,String pattern){
SimpleDateFormat tempSdf = new SimpleDateFormat(pattern);
String str= "";
try {
Date dt=sdfYMD.parse(date);
Calendar c = Calendar.getInstance();
c.setTime(dt);
for(int i=0;i<Math.abs(day);){
if(day<0){
c.add(Calendar.DATE, -1);
}else{
c.add(Calendar.DATE,1);
}
i++;
if(i==Math.abs(day)){
Date d1=c.getTime();
str=tempSdf.format(d1);
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return str;
}
/**
* 根据传入的年和季度以及范围,获得所在范围的数组记录
* @param date 年 如 :2011
* @param quarter 季度 如: 3
* @param scop 季度范围 输入负整数获得前N个记录 、输入正整数获得后N个记录
* @param isCN 返回的结果是否中文
* @return 2011年二季度, 2011年三季度, 2011年四季度, 2012年一季度, 2012年二季度, 2012年三季度, 2012年四季度, 2013年一季度, 2013年二季度, 2013年三季度
* <br>或<br>
*[2011-04-01,2011-06-30, 2011-07-01,2011-09-30, 2011-10-01,2011-12-31, 2012-01-01,2012-03-31, 2012-04-01,2012-06-30, 2012-07-01,2012-09-30, 2012-10-01,2012-12-31, 2013-01-01,2013-03-31, 2013-04-01,2013-06-30, 2013-07-01,2013-09-30]
*/
public static String[] getQuarterCN(String date,int quarter,int scop,boolean isCN){
String[] strs = new String[Math.abs(scop)];
int count=Math.abs(scop)-1;
try {
Date dt =sdfYM.parse(date+"-01");
Calendar c = Calendar.getInstance();
String source = sdfYM.format(dt).substring(0,sdfYM.format(dt).indexOf("-"));
if(scop<0){
if(isCN){
strs[count]=converStr(quarter,source);
}else{
strs[count]=converDate(quarter,source);
}
}else{
if(isCN){
strs[0]=converStr(quarter,source);
}else{
strs[0]=converDate(quarter,source);
}
}
int i=1;
while(i<Math.abs(scop)){
if(scop<0){
quarter--;
if(quarter<=0){
quarter=4;
c.add(Calendar.YEAR, -1);
Date dl=c.getTime();
source =sdfYM.format(dl).substring(0,sdfYM.format(dl).indexOf("-"));
}
if(isCN){
strs[count-i]=converStr(quarter,source);
}else{
strs[count-i]=converDate(quarter,source);
}
}else{
quarter++;
if(quarter>4){
quarter=1;
c.add(Calendar.YEAR, 1);
Date dl=c.getTime();
source=sdfYM.format(dl).substring(0,sdfYM.format(dl).indexOf("-"));
}
if(isCN){
strs[i]=converStr(quarter,source);
}else{
strs[i]=converDate(quarter,source);
}
}
i++;
}
} catch (ParseException e) {
e.printStackTrace();
}
return strs;
}
private static String converStr(int number,String year){
String st="";
switch (number) {
case 1:
st=year+"年一季度";
break;
case 2:
st=year+"年二季度";
break;
case 3:
st=year+"年三季度";
break;
case 4:
st=year+"年四季度";
break;
}
return st;
}
public static String converDate(int number,String year){
String str="";
switch(number){
case 1:
str=getMonthFirstDay(year+"-01-01")+","+getMonthLastDay(year+"-03-01");
break;
case 2:
str=getMonthFirstDay(year+"-04-01")+","+getMonthLastDay(year+"-06-01");
break;
case 3:
str=getMonthFirstDay(year+"-07-01")+","+getMonthLastDay(year+"-09-01");
break;
case 4:
str=getMonthFirstDay(year+"-10-01")+","+getMonthLastDay(year+"-12-01");
break;
}
return str;
}
/**
* 获得一个月的最后一天
* @param data 参数格式:yyyy-MM-dd
* @return
*/
public static String getMonthLastDay(String data){
String dateSource="";
try {
Date dt = sdfYMD.parse(data);
Calendar c =Calendar.getInstance();
c.setTime(dt);
int maxDate= c.getActualMaximum(Calendar.DATE);
c.set(Calendar.DATE, maxDate);
Date dl =c.getTime();
dateSource =sdfYMD.format(dl);
} catch (ParseException e) {
e.printStackTrace();
}
return dateSource;
}
/**
* 获得一个月第一天
* @param date 参数格式:yyyy-MM-dd
* @return
*/
public static String getMonthFirstDay(String date ){
String dataSource="";
try {
Date dt = sdfYMD.parse(date);
Calendar c = Calendar.getInstance();
c.setTime(dt);
int minDate =c.getActualMinimum(Calendar.DATE);
c.set(Calendar.DATE, minDate);
Date dl=c.getTime();
dataSource=sdfYMD.format(dl);
} catch (ParseException e) {
e.printStackTrace();
}
return dataSource;
}