62,614
社区成员
发帖
与我相关
我的任务
分享
public class Test {
public Date getBefore(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long millis = getBefore(calendar);
calendar.setTimeInMillis(millis);
return calendar.getTime();
}
private long getBefore(Calendar c) {
int month = (c.get(Calendar.MONTH) + 1);
int day = c.get(Calendar.DATE);
long monthMillis = 0;
switch (month) {
// 其它月份都减去31天
// 10月31对应9月30
// 11月30对应10对30
case 1:
case 2:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 11:
case 10:
case 12:
monthMillis = calculateMillis(31);
break;
default:
int febDay = 28;
if (isLeapYear(c)) {
febDay = 29;
}
// 大于2月的天数,则减去当前天数
if (day > febDay) {
monthMillis = calculateMillis(day);
} else {
// 否则减去2月的天数
monthMillis = calculateMillis(febDay);
}
break;
}
System.out.println(monthMillis);
return (c.getTimeInMillis() - monthMillis);
}
private long calculateMillis(int month) {
return month * (long) 24 * 60 * 60 * 1000;
}
private boolean isLeapYear(Calendar calendar) {
int year = calendar.get(Calendar.YEAR);
return (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));
}
public static void main(String[] args) throws Exception {
String source = "20001031";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date date = sdf.parse(source);
//
Test t = new Test();
Date beforeMonth = t.getBefore(date);
System.out.println(sdf.format(beforeMonth));
}
}
public class Test {
public Date getBefore(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long millis = getBefore(calendar);
calendar.setTimeInMillis(millis);
return calendar.getTime();
}
private long getBefore(Calendar c) {
int month = (c.get(Calendar.MONTH) + 1);
long monthMillis = 0;
switch (month) {
// 31 day
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthMillis = calculateMillis(31);
break;
// 30 day
case 4:
case 6:
case 9:
case 11:
monthMillis = calculateMillis(30);
break;
// 2 month
default:
if (isLeapYear(c)) {
monthMillis = calculateMillis(29);
} else {
monthMillis = calculateMillis(28);
}
break;
}
System.out.println(monthMillis);
return (c.getTimeInMillis() - monthMillis);
}
private long calculateMillis(int month) {
return month * (long) 24 * 60 * 60 * 1000;
}
private boolean isLeapYear(Calendar calendar) {
int year = calendar.get(Calendar.YEAR);
return (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));
}
public static void main(String[] args) throws Exception {
String source = "20110922";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date date = sdf.parse(source);
//
Test t = new Test();
Date beforeMonth = t.getBefore(date);
System.out.println(sdf.format(beforeMonth));
}
}
GregorianCalendar calendar = new GregorianCalendar(2011, 9, 31);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM//dd");
System.out.println(sdf.format(calendar.getTime()));
for (int i = 0; i < 100; i++) {
calendar.add(Calendar.MONTH, -1);
System.out.println(sdf.format(calendar.getTime()));
}