java中如何表示上个月倒数第2天(date1)和本月倒数第2天(date2)? date1和date2表示成yyyymmdd格式的.给具体讲解下啊,本人是新手,研究了半天api,还是没有弄懂。现在又急着用。拜谢了先。

解决方案 »

  1.   

    去看下Calander   类的用法
      

  2.   


    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天
    }
    上个月的自己试试吧
      

  3.   

    DateFormat df=new SimpleDateFormat("yyyyMMdd");
    String dateStr=df.format(ca.getTime());
    System.out.println(dateStr)
    格式转换
      

  4.   

    import java.text.SimpleDateFormat;
    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    }
    }
      

  5.   

    思路就应该是这样的用这个月的一月一号所对应的那个长整形数减去 2 * 24 * 60 * 60 * 1000 得到一个数,然后再把这个数转成Calendar 或 Date.
      

  6.   


    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()));
    }
    }
      

  7.   

    答:
    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]
      

  8.   

    思路:首先获取当前时间,然后获取当前月份,加1后,并设置天数位1,这样就表示下个月第一天,
    再调用相应的方法减一天,减两天, 典型Calander类用法
      

  9.   

    这么多人写了,随手写一个吧
    日期转化可以用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()); //本月倒数第二天        
        }
      

  10.   

    public static void main(String[] args) {
    // 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()));

    }
      

  11.   

    思路就是:
    每个月的第一天都是1号
    求上个月的倒数第二天,你就先把日期设置到本月第一天,然后date减2即可
    求本月的倒数第二天,同理,先把日期设置到下月第一天,然后date减2即可
      

  12.   

    \顶一下!!!确实是这样的.!!代码就不给你了.
    自己写下..用Calendar很简单的.!
      

  13.   

    有兴趣可以去www.java21.cn看看,那里有很接近的答案。
      

  14.   

    import java.text.SimpleDateFormat;
    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 }
    }
    试了一下,这个可用。学习
      

  15.   

    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()));
    }
    }
      

  16.   

    貌似你们都没有考虑一月的情况啊,我是做测试的!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);
    }
    }