获取指定某一天的前一个月或前一年日期的方法

 

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 ;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值