用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
oracle 直接用函数add_months(time,-1)
欢迎指正,我却是没测试过。日期格式弄错了,对不起啊。 而且计算也搞反了,呵呵。但想法应该没问题 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);
又不是为分才回答问题的,全给你也无所谓。行不行你试试看就知道了。只有谦虚的人才当得了程序员。为什么我建议楼主用Date,因为楼主没表明他是在java程序里写。 Date JavaScript里也能用。Calendar能吗
确实老了啊,最后订正 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);
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()); } }
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());
}
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
欢迎指正,我却是没测试过。日期格式弄错了,对不起啊。
而且计算也搞反了,呵呵。但想法应该没问题
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);
又不是为分才回答问题的,全给你也无所谓。行不行你试试看就知道了。只有谦虚的人才当得了程序员。为什么我建议楼主用Date,因为楼主没表明他是在java程序里写。
Date JavaScript里也能用。Calendar能吗
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);
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());
}
}
你真的当不了程序员了,你能打印一下你的oneMonthBefore是多少吗?
打完后,你自己告诉我你适不适合当程序员。
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
不做unit test的程序员永远是一个垃圾程序员。