String startDateStr = "" ;
String endDateStr = "" ;
TimeZone tzES2 = TimeZone.getTimeZone("GMT+8");
Calendar calES2 = Calendar.getInstance(tzES2);
Calendar ca = Calendar.getInstance();
Date now = ca.getTime();
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd" ) ;
dateFormat.setCalendar(calES2) ;
String s = dateFormat.format(now) ;//2013/01/03
String[] sp = s.split("/") ; // 2013 01 03
sp[sp.length-1] = "01" ;
System.out.println(Integer.parseInt(sp[1]));
startDateStr =  sp[0] + "/" + sp[1] + "/" + sp[2] ;
List list = new ArrayList() ;
sp[sp.length-1] = "31" ;
endDateStr = sp[0]  + "/" + sp[1]  + "/" + sp[2];
System.out.println(endDateStr);我这段程序可以获取到 当月 1号到 31号 的数据   就是 2013年1月1日 到2013年1月31日
如果修改它的月份,让它能指向上一个月的呢。就是 2012年12月1日 到 2012年12月31日
最好有代码解释。谢谢各位!javadatecalendarstringtimezone

解决方案 »

  1.   


    public static void main(String[] args) {
    Calendar c = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    c.set(Calendar.YEAR, 2013);
    c.set(Calendar.MONTH, 1);
    c.set(Calendar.DATE, 3);
    c.add(Calendar.MONTH, -2);
    System.out.println(sdf.format(c.getTime()));
    }
      

  2.   

    String startDateStr = "";
    String endDateStr = "";
    TimeZone tzES2 = TimeZone.getTimeZone("GMT+8");
    Calendar calES2 = Calendar.getInstance(tzES2);
    Calendar ca = Calendar.getInstance();
    Date now = ca.getTime();
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
    dateFormat.setCalendar(calES2); ca.set(Calendar.DATE, ca.getActualMinimum(Calendar.DAY_OF_MONTH));//设置当前日期为当前月的第一天
    now = ca.getTime();
    startDateStr = dateFormat.format(now); ca.set(Calendar.DATE, ca.getActualMaximum(Calendar.DAY_OF_MONTH));//设置当前日期为当前月的最后一天
    now = ca.getTime();
    endDateStr = dateFormat.format(now); System.out.println(startDateStr);
    System.out.println(endDateStr);

    ca.add(Calendar.MONTH, -1);//设置日期为当前日期加上-1个月(即减去1个月)的日期。后面的操作同上
      

  3.   

    有点空闲,写个共通的给你用用import java.text.SimpleDateFormat;
    import java.util.Calendar;public class Temp { /**
     * @param args
     */
    public static void main(String[] args) { System.out.println(getMonthStartAndEnd("2012/01/03", 0));
    System.out.println(getMonthStartAndEnd("2012/01/03", -1));
    System.out.println(getMonthStartAndEnd("2012/01/03", 1));
    System.out.println(getMonthStartAndEnd("2012/01/03", -2));
    System.out.println(getMonthStartAndEnd("2012/01/03", 2));
    }

    /**
     * 所在日期前后偏移几个月的第一天和最后一天
     * @param date 所在日期
     * @param offset 偏移量(例如:当月0,下月1,上月-1)
     * @return 当月的第一天和最后一天
     */
    private static String getMonthStartAndEnd(String date, int offset) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, Integer.valueOf(date.split("/")[0]));
    cal.set(Calendar.MONTH, Integer.valueOf(date.split("/")[1]) - 1);
    cal.set(Calendar.DATE, 1);
    cal.add(Calendar.MONTH, offset + 1);
    cal.add(Calendar.DATE, -1);
    String end = sdf.format(cal.getTime());

    cal.set(Calendar.DATE, 1);
    String start = sdf.format(cal.getTime());

    return start + " ~ " + end;
    }
    }
      

  4.   

    private String saaddMonth(String year_month, int amount) {
    com.qherp.util.FastDate fdate = new com.qherp.util.FastDate(year_month
    + "-01");
    java.util.Calendar cal = java.util.GregorianCalendar.getInstance();
    cal.setTime(fdate);
    cal.add(Calendar.MONTH, amount);
    String result = com.qherp.util.ErpUtil.toDate("yyyy-MM", cal.getTime());
    return result;
    }
    /** 
    * 计算两个日期之间相差的月数 
    * @param date1 此为开始日期
    * @param date2 此为结束日期
    * @return 
    */ private int sagetMonths(Date date1, Date date2) {
    //采用date2减,如果减到正好相同为止
    String beginyearmonth = ErpUtil.toDate("yyyy-MM", date1);
    String endmonth = ErpUtil.toDate("yyyy-MM", date2);
    int i = 0;
    String curmonth = endmonth;
    while (true) {
    curmonth = saaddMonth(endmonth, -1);
    if (curmonth.compareToIgnoreCase(beginyearmonth) == 0)
    break;
    i++;
    }
    return i + 1;
    }
      

  5.   

    private String saaddMonth(String year_month, int amount) {
    com.qherp.util.FastDate fdate = new com.qherp.util.FastDate(year_month
    + "-01");
    java.util.Calendar cal = java.util.GregorianCalendar.getInstance();
    cal.setTime(fdate);
    cal.add(Calendar.MONTH, amount);
    String result = com.qherp.util.ErpUtil.toDate("yyyy-MM", cal.getTime());
    return result;
    }
    /** 
    * 计算两个日期之间相差的月数 
    * @param date1 此为开始日期
    * @param date2 此为结束日期
    * @return 
    */
    private int sagetMonths(Date date1, Date date2) {
    //采用date2减,如果减到正好相同为止
    String beginyearmonth = ErpUtil.toDate("yyyy-MM", date1);
    String endmonth = ErpUtil.toDate("yyyy-MM", date2);
    if (beginyearmonth.compareToIgnoreCase(endmonth) == 0)
    return 1;
    int i = 1;
    String curmonth = endmonth;
    while (true) { 
    curmonth = saaddMonth(endmonth, -1); 
    endmonth = curmonth;
    if (curmonth.compareToIgnoreCase(beginyearmonth) == 0)
    break;
    if (i > 100)
    break;
    i++;
    }
    return i + 1;
    }