1.java实现
import java.util.Calendar;
public class TestGetLastMonth {/**
* 获取指定月的前一月(年)或后一月(年)
* @param dateStr
* @param addYear
* @param addMonth
* @param addDate
* @return 输入的时期格式为yyyy-MM,输出的日期格式为yyyy-MM
* @throws Exception
*/
public static String getLastMonth(String dateStr,int addYear, int addMonth, int addDate) throws Exception {
try {
//java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM");
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
java.util.Date sourceDate = sdf.parse(dateStr);
Calendar cal = Calendar.getInstance();
cal.setTime(sourceDate);
cal.add(Calendar.YEAR,addYear);
cal.add(Calendar.MONTH, addMonth);
cal.add(Calendar.DATE, addDate);//java.text.SimpleDateFormat returnSdf = new java.text.SimpleDateFormat("yyyy-MM");
java.text.SimpleDateFormat returnSdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
String dateTmp = returnSdf.format(cal.getTime());
java.util.Date returnDate = returnSdf.parse(dateTmp);
return dateTmp;
} catch (Exception e) {
e.printStackTrace();
throw new Exception(e.getMessage());
}
}/**
* 测试
* @param args
*/
public static void main(String[] args) {
try{
System.out.println(TestGetLastMonth.getLastMonth("2011-06",0,-1,0));//2011-05
System.out.println(TestGetLastMonth.getLastMonth("2011-06",0,-6,0));//2010-12
System.out.println(TestGetLastMonth.getLastMonth("2011-06",-1,0,0));//2010-06
}catch (Exception e) {}
}
}
2.oracle查询实现
(1 )使用内置函数numtodsinterval增加小时,分钟和秒
(2 )加一个简单的数来增加天
(3 )使用内置函数add_months来增加年和月
例:
对当前日期增加一个小时:
SQL> select sysdate, sysdate+numtodsinterval(1,’hour’) from dual ;
对当前日期增加50分种
SQL> select sysdate, sysdate+numtodsinterval(50,’minute’) from dual ;
对当前日期增加45秒
SQL> select sysdate, sysdate+numtodsinterval(45,’second’) from dual ;
对当前日期增加3天
SQL> select sysdate, sysdate+3 from dual ;
对当前日期增加4个月
SQL> select sysdate, add_months(sysdate,4) from dual ;
当前日期增加2年
SQL> select sysdate, add_months(sysdate,12*2) from dual ;