import java.text.SimpleDateFormat; import java.util.Calendar; public class ClanderTest { private static String format = "yyyMMdd"; public static void main(String[] args) { showdays(2009, 4); } private static void showdays(int year, int month) { SimpleDateFormat df = new SimpleDateFormat(format); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, 1); c.add(Calendar.DAY_OF_MONTH, -2); System.out.println("The last second day of last month:" + df.format(c.getTime()));
c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month); c.set(Calendar.DAY_OF_MONTH, 1); c.add(Calendar.DAY_OF_MONTH, -2); System.out.println("The last second day of current month:" + df.format(c.getTime())); } }
貌似你们都没有考虑一月的情况啊,我是做测试的!package com.fafeiboy.test;import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar;public class TestDate { public static void main(String[] args) { GregorianCalendar calendar = new GregorianCalendar(); GregorianCalendar calendarTemp1 = new GregorianCalendar(); GregorianCalendar calendarTemp2 = new GregorianCalendar(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); if (month == 0) { month = 11; year--; } calendarTemp1.set(year, month - 1, 1); calendarTemp2.set(year, month, 1); int date1 = calendarTemp1 .getActualMaximum(GregorianCalendar.DAY_OF_MONTH); int date2 = calendarTemp2 .getActualMaximum(GregorianCalendar.DAY_OF_MONTH); calendarTemp1.set(year, month - 1, date1 - 1); calendarTemp2.set(year, month, date2 - 1); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String s1 = sdf.format(calendarTemp1.getTime()); String s2 = sdf.format(calendarTemp2.getTime()); System.out.println(s1); System.out.println(s2); } }
public static void main(String[] args) {
Calendar ca = Calendar.getInstance();
System.out.println(ca.getTime());//今天
ca.set(ca.get(Calendar.YEAR), ca.get(Calendar.MONTH), ca
.getActualMaximum(Calendar.DAY_OF_MONTH)-1);
System.out.println(ca.getTime());//本月倒数第2天
}
上个月的自己试试吧
String dateStr=df.format(ca.getTime());
System.out.println(dateStr)
格式转换
import java.util.Calendar;public class TT { public static void main(String[] args) {
getDay(2009, 1);
} private static void getDay(int year, int month) {
SimpleDateFormat df=new SimpleDateFormat("yyyyMMdd");
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month-1);
c.set(Calendar.DAY_OF_MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -2);
System.out.println("上月倒数第二天为:"+df.format(c.getTime()));
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -2);
System.out.println("本月倒数第二天为:"+df.format(c.getTime()));
//测试结果为
//上月倒数第二天为:20081230
//本月倒数第二天为:20090130 }
}
import java.text.SimpleDateFormat;
import java.util.Calendar;public class TT { public static void main(String[] args) {
getDay(2008, 12);
} private static void getDay(int year, int month) {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month - 1);
c.set(Calendar.DAY_OF_MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -2);
System.out.println("上月倒数第二天为:" + df.format(c.getTime()));
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
if(month==12){ //修改了一下,就是如果是12月的倒数第二天的时候,要把年和月分别设新值。
c.set(Calendar.YEAR, year+1);//年份+1
c.set(Calendar.MONTH, 0);//1月
}
c.set(Calendar.DAY_OF_MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -2);
System.out.println("本月倒数第二天为:" + df.format(c.getTime()));
}
}
GregorianCalendar c=new GregorianCalendar();
System.out.println("年:"+c.get(Calendar.YEAR)+" 月:"+( c.get(Calendar.MONTH) + 1)+" 日:"+ c.get(Calendar.DAY_OF_MONTH) );
//本月倒数第二天:
GregorianCalendar c1=new GregorianCalendar(c.get(Calendar.YEAR),c.get(Calendar.MONTH)+1,1);
c1.add(Calendar.DAY_OF_MONTH, -2);//此时:c1是本月倒数第二天
System.out.println("本月倒数第二天:"+"[年:"+c1.get(Calendar.YEAR)+" 月:"+( c1.get(Calendar.MONTH) + 1)+" 日:"+ c1.get(Calendar.DAY_OF_MONTH)+"]");
//上月倒数第二天:
GregorianCalendar c2=new GregorianCalendar(c.get(Calendar.YEAR),c.get(Calendar.MONTH),1);
c2.add(Calendar.DAY_OF_MONTH, -2);//此时:c2是上月倒数第二天
System.out.println("上月倒数第二天:"+"[年:"+c2.get(Calendar.YEAR)+" 月:"+( c2.get(Calendar.MONTH) + 1)+" 日:"+ c2.get(Calendar.DAY_OF_MONTH)+"]"); 运行结果:
年:2009 月:4 日:13
本月倒数第二天:[年:2009 月:4 日:29]
上月倒数第二天:[年:2009 月:3 日:30]
再调用相应的方法减一天,减两天, 典型Calander类用法
日期转化可以用String.format,或System.out.printf
public static void main(String[] args) {
Calendar ca = Calendar.getInstance();
int days = ca.getActualMaximum(Calendar.DAY_OF_MONTH); //获得本月最大天数
int today = ca.get(Calendar.DAY_OF_MONTH);
Calendar cc = Calendar.getInstance();
System.out.printf("%1$tY%1$tm%1$td", cc.add(Calendar.DAY_OF_MONTH, 0-today-2).getTime()); //上月倒数第二天
//cc.setTime(ca.getTime());
//System.out.printf("%1$tY%1$tm%1$td", cc.add(Calendar.DAY_OF_MONTH, days-today-2).getTime()); //本月倒数第二天
//或者
System.out.printf("%1$tY%1$tm%1$td", cc.add(Calendar.DAY_OF_MONTH, days).getTime()); //本月倒数第二天
}
// TODO Auto-generated method stub
//获取当前时间
Calendar c1=Calendar.getInstance();
//设置c1的天为最大天数-1;
c1.set(c1.get(Calendar.YEAR), c1.get(Calendar.MONTH),
c1.getActualMaximum(Calendar.DAY_OF_MONTH)-1);
Calendar c2=Calendar.getInstance();
//设置c2的月为当月-1
c2.set(Calendar.MONTH,c1.get(Calendar.MONTH)-1);
//设置c2的天为最大天数-1
c2.set(Calendar.DAY_OF_MONTH,c2.getActualMaximum(c2.DAY_OF_MONTH)-1);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
//格式化并输出
System.out.println(sdf.format(c1.getTime()));
System.out.println(sdf.format(c2.getTime()));
}
每个月的第一天都是1号
求上个月的倒数第二天,你就先把日期设置到本月第一天,然后date减2即可
求本月的倒数第二天,同理,先把日期设置到下月第一天,然后date减2即可
自己写下..用Calendar很简单的.!
import java.util.Calendar;public class TT { public static void main(String[] args) {
getDay(2009, 3);
} private static void getDay(int year, int month) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month - 1);
c.set(Calendar.DAY_OF_MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -2);
System.out.println("上月倒数第二天为:" + df.format(c.getTime()));
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -2);
System.out.println("本月倒数第二天为:" + df.format(c.getTime()));
// 测试结果为
// 上月倒数第二天为:20081230
// 本月倒数第二天为:20090130 }
}
试了一下,这个可用。学习
import java.util.Calendar;
public class ClanderTest {
private static String format = "yyyMMdd";
public static void main(String[] args) {
showdays(2009, 4);
}
private static void showdays(int year, int month) {
SimpleDateFormat df = new SimpleDateFormat(format);
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month - 1);
c.set(Calendar.DAY_OF_MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -2);
System.out.println("The last second day of last month:" + df.format(c.getTime()));
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -2);
System.out.println("The last second day of current month:" + df.format(c.getTime()));
}
}
import java.util.Calendar;
import java.util.GregorianCalendar;public class TestDate {
public static void main(String[] args) {
GregorianCalendar calendar = new GregorianCalendar();
GregorianCalendar calendarTemp1 = new GregorianCalendar();
GregorianCalendar calendarTemp2 = new GregorianCalendar();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
if (month == 0) {
month = 11;
year--;
}
calendarTemp1.set(year, month - 1, 1);
calendarTemp2.set(year, month, 1);
int date1 = calendarTemp1
.getActualMaximum(GregorianCalendar.DAY_OF_MONTH);
int date2 = calendarTemp2
.getActualMaximum(GregorianCalendar.DAY_OF_MONTH);
calendarTemp1.set(year, month - 1, date1 - 1);
calendarTemp2.set(year, month, date2 - 1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String s1 = sdf.format(calendarTemp1.getTime());
String s2 = sdf.format(calendarTemp2.getTime());
System.out.println(s1);
System.out.println(s2);
}
}