例如,指定日期为2010-03-31
前一个月的日期:2010-02-28
前两个月的日期:2010-01-31
前一年的日期:2009-03-31通过什么方法可以实现?

解决方案 »

  1.   

    public static void main(String[] args) throws ParseException {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Calendar c = Calendar.getInstance();
    c.setTime(simpleDateFormat.parse("2010-03-31"));

    // 前一个月的日期:2010-02-28
    c.add(Calendar.MONTH, -1);
    System.out.println(c.getTime());

    // 前两个月的日期:2010-01-31
    c.setTime(simpleDateFormat.parse("2010-03-31"));
    c.add(Calendar.MONTH, -2);
    System.out.println(c.getTime());

    // 前一年的日期:2009-03-31
    c.setTime(simpleDateFormat.parse("2010-03-31"));
    c.add(Calendar.YEAR, -1);
    System.out.println(c.getTime());
    }
      

  2.   

    用Date就可以实现啊        Date baseDte = new Date("2010-03-31");
            Date oneMonthBefore = new Date();
            Date twoMonthBefore = new Date();
            Date oneYearBefore = new Date();
            oneMonthBefore.setMonth(baseDte.getMonth() + 1);
            twoMonthBefore.setMonth(baseDte.getMonth() + 2);
            oneYearBefore.setYear(baseDte.getYear() + 1);当然也可以用Calendar的add
      

  3.   

    oracle 直接用函数add_months(time,-1)
      

  4.   


    欢迎指正,我却是没测试过。日期格式弄错了,对不起啊。
    而且计算也搞反了,呵呵。但想法应该没问题
      Date baseDte = new Date("2010/03/31");
      Date oneMonthBefore = new Date();
      Date twoMonthBefore = new Date();
      Date oneYearBefore = new Date();
      oneMonthBefore.setMonth(baseDte.getMonth() - 1);
      twoMonthBefore.setMonth(baseDte.getMonth() - 2);
      oneYearBefore.setYear(baseDte.getYear() - 1);
      

  5.   


    又不是为分才回答问题的,全给你也无所谓。行不行你试试看就知道了。只有谦虚的人才当得了程序员。为什么我建议楼主用Date,因为楼主没表明他是在java程序里写。
    Date JavaScript里也能用。Calendar能吗
      

  6.   

      确实老了啊,最后订正
      Date baseDte = new Date("2010/03/31");
      Date oneMonthBefore = new Date("2010/03/31");
      Date twoMonthBefore = new Date("2010/03/31");
      Date oneYearBefore = new Date("2010/03/31");
      oneMonthBefore.setMonth(baseDte.getMonth() - 1);
      twoMonthBefore.setMonth(baseDte.getMonth() - 2);
      oneYearBefore.setYear(baseDte.getYear() - 1);
      

  7.   

     public static String checkMonth2Date(String dateStr,int addYear, int addMonth, int addDate) throws Exception {
                    try {
                            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-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());
                    }
            }
      

  8.   


    你真的当不了程序员了,你能打印一下你的oneMonthBefore是多少吗?
    打完后,你自己告诉我你适不适合当程序员。
      

  9.   

        System.out.println(Test.checkMonth2Date("2010-03-31",0,-1,0));
        System.out.println(Test.checkMonth2Date("2010-03-31",0,-2,0));
        System.out.println(Test.checkMonth2Date("2010-03-31",-1,0,0));运行结果2010-02-28
    2010-01-31
    2009-03-31
      

  10.   

    我知道用Calendar是可以的觉得用Date也应该是可以的,现在证明不行。感谢eBao123刚刚查了java文档,不让这么用。
      

  11.   

    哦,拿分!!!这个看API就可以了
      

  12.   

    没有被测试过的代码我们就要默认为他们全是错的。
    不做unit test的程序员永远是一个垃圾程序员。