/**
     * 日期相加
     *
     * @param day
     *             天数
     * @return 返回相加后的日期
     */
    public static String addDate(int day) {
 java.util.Calendar c = java.util.Calendar.getInstance(); c.setTimeInMillis(System.currentTimeMillis() + ((long) day) * 24 * 3600
  * 1000);
 SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
 return df.format(c.getTime());
    }

解决方案 »

  1.   


    import java.text.Format;
    import java.text.SimpleDateFormat;
    import java.util.Date;class Test {
     public static void main(String args[]) {
      Format format=new SimpleDateFormat("yyyy-MM-dd");
      long time=0;
      int day=30;
      Date today=new Date();
      time=(today.getTime()/1000)+60*60*24*day;
      Date newDate=new Date();
      newDate.setTime(time*1000); 
      System.out.println(format.format(newDate));
     }
    }
      

  2.   

    分享一个我自己的代码给你,各种算日期
    package com.kx.util;import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;public class DateUtil
    {
        /**
         * 格式化日期为String型:  yyyy-MM-dd HH:mm:ss
         * @author 阳熙
         * @param inTime
         * @return
         */
        public static String getStringDateTime(Object inTime)
        {
            if(inTime instanceof String)
            {
                inTime = getDateTime((String) inTime);
            }
            SimpleDateFormat dfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String outTime = dfTime.format(inTime);
            return outTime;
        }
        
        /**
         * 格式化日期为String型: yyyy-MM-dd
         * @author 阳熙
         * @param inTime
         * @return
         */
        public static String getStringDate(Object inTime)
        {
            if(inTime instanceof String)
            {
                inTime = getDateTime((String) inTime);
            }
            SimpleDateFormat dfTime = new SimpleDateFormat("yyyy-MM-dd");
            String outTime = dfTime.format(inTime);
            return outTime;
        }
        
        /**
         * 根据字符串得到yyyy-MM-dd HH:mm:ss格式日期
         * @param dateString
         * @return
         */
        public static Date getDateTime(String dateString)
        {
            DateFormat df =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date=null;
            try {
                date = df.parse(dateString);
            } catch (ParseException e) 
            {
                e.printStackTrace();
            }
            return date;
        }
        
        /**
         * 根据字符串得到yyyy-MM-dd格式日期
         * @param dateString
         * @return
         */
        public static Date getDate(String dateString)
        {
            DateFormat dd=new SimpleDateFormat("yyyy-MM-dd");
            Date date=null;
            try {
                date = dd.parse(dateString);
            } catch (ParseException e) 
            {
                e.printStackTrace();
            }
            return date;
        }
        
    /**
     * 得到指定日期的星期几
     * @param date
     * @return
     */
    public static int getWeek(Date date){
    //        SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
    //        String week = sdf.format(date);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.DAY_OF_WEEK);
        }

    /**
     * 得到指定日期是当月第几日
     * @author 阳熙
     * @param date
     * @return
     */
    public static int getMonth(Date date){
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 将String日期转化为Long型,精确到毫秒值,如果转换失败,则为-1;
     * @param stringDate
     * @return
     */
    public static Long getLongDate(String stringDate)
    {
    SimpleDateFormat dfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Long longDate = -1L;
    try
    {
    longDate = dfTime.parse(stringDate).getTime();
    }
    catch (ParseException e)
    {
    System.out.println("转换日期格式出错!");
    e.printStackTrace();
    }
    return longDate;
    }

    /**
     * @param n
     * @return 当前日期的后n天
     */
    public static String afterNowDay(int n)
    {   
    Calendar c=Calendar.getInstance();
    DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
    c.setTime(new Date());
    c.add(Calendar.DATE,n);
    Date d2=c.getTime();
    String s=df.format(d2);
    return s;
    }
    /**
     * @param n
     * @return 当前日期的前n天
     */
    public static String beforNowDay(int n)
    {   
    Calendar c=Calendar.getInstance();
    DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
    c.setTime(new Date());
    c.add(Calendar.DATE,-n);
    Date d2=c.getTime();
    String s=df.format(d2);
    return s;
    }

    /**
     * 获得指定时间date前n天日期
     * @author 阳熙
     * @param n
     * @return
     */
    public static String beforTheDay(String date,int n)
    {   
        Calendar c=Calendar.getInstance();
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        Date tdate = null;
            try
            {
                tdate = df.parse(date);
            }
            catch (ParseException e)
            {
                System.out.println("异常信息:"+"转换时间异常!");
                e.printStackTrace();
            }
        c.setTime(tdate);
        c.add(Calendar.DATE,-n);
        Date d2=c.getTime();
        String s=df.format(d2);
        return s;
    }

    }
      

  3.   

    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_MONTH, -20);
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(df.format(calendar.getTime()));
      

  4.   

    long timeTwentyDaysBefore = System.currentTimeMillis() - 1000l*60*60*24*20;
    System.out.println(new java.util.Date(timeTwentyDaysBefore));
      

  5.   

    楼上两位已经给你了现成的代码了,不过我觉得太过麻烦,给我写以前用过的一个日期处理工具吧!另外,对于这种小问题,最好要自己试着写一写public class DateUtil {

    /**
     * 得出两个日期之间相差的天数
     * @param date1 前一个日期
     * @param date2 后一个日期
     * @return
     */
    public static int getDays(Date date1, Date date2) {
    Calendar calendar = Calendar.getInstance();
    Calendar calendar2 = Calendar.getInstance();
    calendar.setTime(date1);
    calendar2.setTime(date2);
    int days = 0;
    while(calendar.compareTo(calendar2) == -1){
    calendar.add(Calendar.DATE, 1);
    days++;
    }
    while(calendar.compareTo(calendar2) > 0){
    calendar.add(Calendar.DATE, -1);
    days--;
    }
    return days;
    } /**
     * 得到与date日期相差time天的日期
     * @param date 给出的日期
     * @param time 相差的天数,正的为date前time天的日期,负的为date后time天的日期
     * @return
     */
    public static Date getDateAfterDate(Date date, int time) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.DATE, time);
    date = calendar.getTime();
    return date;
    } /**
     * 由字符串格式化输出日期(yyyy-mm-dd)
     * @param date
     * @return
     */
    public static Date formatDate(String date) {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    Date time = null;
    try {
    time = df.parse(date);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    return time;
    }
    /**
     * 格式化输出日期的字符串(yyyy-mm-dd)
     * @param date
     * @return
     */
    public static String formatDateToString(Date date) {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    String time = df.format(date);
    return time;
    }

    /**
     * 得到当天的日期
     * @return
     */
    public static Date getNowDate(){
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DATE, 0);
    return calendar.getTime();
    }
    }
      

  6.   

    这个可以再简化下
    public static int getDays(Date date1, Date date2) {
    int day = 0;
    long times = date1.getTime() - date2.getTime();
    day = (int)times/86400000;
    return day;
    }
      

  7.   

    这个可以再简化下
    public static int getDays(Date date1, Date date2) {
    int day = 0;
    long times = date1.getTime() - date2.getTime();
    day = (int)times/86400000;
    return day;
    }
    对不过我以前也是这样写的,可能是我写代码怪癖的毛病,打心眼里不想把时间当成数字来计算
      

  8.   

    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_MONTH, -20);
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");        System.out.println(df.format(calendar.getTime()));
      

  9.   

    java.util.GregorianCalendar  类可以实现,LZ自行查看API
      

  10.   

    建议学习下joda-time,非常使用的时间框架,很容易学,20天前,一句代码的事情就可以解决
      

  11.   

    jodatime:http://www.oschina.net/question/12_7643 
      

  12.   

    Calendar类可以直接解决。用add方法可以加减时间的任意部分,getTime得到最后的结果(会自动转化不规则的的时间)。4楼就是结果。
      

  13.   

    +1,用java.util.Calendar这个好 顶
      

  14.   

    //当前日期加几天或者减几天
    public static Date addday(String Date,int day){
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
    Date date=null;
    try {
    date = format.parse(Date);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    //当前日期加几天
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.DAY_OF_MONTH, day);
    //System.out.println("到期:"+cal.getTime().toLocaleString());
    return cal.getTime();
    }