要求很简单,只想求一个当前最流行的版本。某一天 之后的20天。baseDate 某一天
amount   之后的n天
public static String getDayAfter(String baseDate,  int amount) {      return rsltDate; // 结果}

解决方案 »

  1.   

    通过Data得到long型的时间,然后加上20l*24l*3600l*1000l
    然后构造Data,再format
    没有最流行的,这个速度快而已
      

  2.   

    先用java.text.SimpleDateFormat的parse方法把String baseDate转成Calendar,再用add方法加上20天,再用java.text.SimpleDateFormat转字符串要晕,为什么要用字符串表示日期呀
      

  3.   

    public static String getDayAfter(String dateFrom, int amount) {
            Date dt = null;
            Date date = null;
            try {
                dt = new SimpleDateFormat("yyyyMMdd").parse(dateFrom);
                long times = dt.getTime();
                long dateMillSec = amount * 24 * 60 * 60 * 1000;
                times = times + dateMillSec;
                date = new Date(times);
            } catch (ParseException e) {
               return null;
            }
            return formatDate(date, "yyyyMMdd");
        }
    我最后搞成这个样子了。赫赫
      

  4.   

    请教: malligator(不能再整天泡在CSDN里了!) ( ) 信誉:100    Blog add方法有两个参数 add(int field, int amount)第一个参数应该放什么啊?
      

  5.   

    java.util 里的类 Calendar 
      

  6.   

    public static String getDayAfterUseCal(String dateFrom, int amount) {
            Calendar cal = new GregorianCalendar();
            cal.add(Calendar.DAY_OF_MONTH, amount);
            return new SimpleDateFormat("yyyyMMdd").format(cal.getTime()).toString();
        }这样写的不到我要的结果。
    add方法有两个参数 add(int field, int amount)第一个参数应该放什么啊?
      

  7.   

    Calendar calendar = Calendar.getInstance();calendar.set(2006, 12, 15+20, 12, 00, 00);//把要加的放到“20”这里
    Date d = calendar.getTime();
    String strDate = (new SimpleDateFormat("yyyy/MM/dd hh/mm/ss")).format(d);
    System.out.println("strDate--->" + strDate);
      

  8.   

    long dateMillSec = amount * 24 * 60 * 60 * 1000;
    最好改成
    long dateMillSec = 24l * 60 * 60 * 1000 * amount;
    否则会出现溢出的情况
      

  9.   

    24l * 60 * 60 * 1000 * amount;
    为什么是 241 呢?
      

  10.   

    唉,可悲呀简单的问题一堆人来回答,结果都一样
    有难度的问题没人回答这是传说中的csdn吗?问题是简单的帖子知道结贴,难的帖子无人结贴
      

  11.   

    24l最后是L的,字母,就是说这个市long型,不然会溢出,按照int处理了
      

  12.   

    是  24 L 我错了,大家鄙视我吧。rickyelf(elf) ( ) 信誉:100    Blog 这个方法不对啊
      

  13.   

    24l --> 24L 表示是 long 型的。
      

  14.   

    Calendar n = Calendar.getInstance();
        n.set(2006,00,01);
        n.add(Calendar.DAY_OF_YEAR,20);
        System.out.println(n.getTime().toString());这个不是可以吗!
      

  15.   

    Calendar 的month 是从0-11的calendar.add(Calendar.DATE, 20);*********************************************************************************
    Field number for get and set indicating the month. This is a calendar-specific value. The first month of the year is JANUARY which is 0; the last depends on the number of months in a year.
    *********************************************************************************
      

  16.   

    谢谢各位的指导,
    最后总结出两种方案方案1:
        public static String getDayAfter(String dateFrom, int amount) {
            Date dt = null;
            Date date = null;
            try {
                dt = new SimpleDateFormat("yyyyMMdd").parse(dateFrom);
                long times = dt.getTime();
                long dateMillSec = 24l * 60 * 60 * 1000 * amount;
                times = times + dateMillSec;
                date = new Date(times);
            } catch (ParseException e) {
               return null;
            }
            return formatDate(date, "yyyyMMdd");
        }
        
    方案2
        public static String getDayAfterUseCal(String dateFrom, int amount) {
            Calendar cal = new GregorianCalendar();
            cal.set(Integer.parseInt(dateFrom.substring(0, 4)), Integer.parseInt(dateFrom.substring(4,6)) - 1, Integer.parseInt(dateFrom.substring(6)));
            cal.add(Calendar.DATE, amount);
            return new SimpleDateFormat("yyyyMMdd").format(cal.getTime()).toString();
        }
      

  17.   

    static int[] days = { 29, 31, 28, 31, 2, 31, 30, 31, 31, 30, 31, 30, 31 };
            
    public static boolean checkYear(int year) {
    if (year % 400 == 0 || (year % 4 == 0) && year % 100 != 0) {
    return true;
    } else {
    return false;
    }
    }
            
    public static int nextMonth(int[] date,boolean off) {
    if(!off){
    int tmp[]={date[0],date[1]};
    date=tmp;
    }
    if(date[1]==12){
    date[1]=1;
    date[0]=date[0]+1;
    }else{
    date[1]=date[1]+1;
    }
    if(checkYear(date[0])&& date[1]==2){
    return days[0];
    }
    System.out.println(date[1]) ;
    return days[date[1]];
    }         //我的分数
    static String getDayAfter(int date[], int afterNum) {
    int maxDay = days[date[1]];
    if (date[2] + afterNum <= maxDay) {
    date[2] = date[2] + afterNum;
    } else {
    afterNum = afterNum - (maxDay - date[2]);
    while (afterNum>nextMonth(date,false)) {
    afterNum = afterNum - nextMonth(date,true);
    }
    nextMonth(date,true);
    date[2]=afterNum;
    }
    return date[0]+"年"+date[1]+"月"+date[2]+"日";
    }       //测试代码
            int[] a={1999,12,15};
            System.out.print(getDayAfter(a,17)) ;       基本上所有面试的关于日期转换的题目都逃不出这些框框
           lz多给点
      

  18.   

    calendar = Calendar.getInstance();
          Date trialTime = new Date();
          calendar.setTime(trialTime);
    public String getDayAfter20(){
     int d=Calendar.DAY_OF_MONTH - 20;
     calendar.set(Calendar.DAY_OF_MONTH,d);
      return dateFormat(calendar.getTime());
    }
      

  19.   

    syoumei(只答有趣的题,只解答不甚懂的题) ( ) 信誉:100    Blog 难为你写出这样的算法了。赫赫。我会给你多点的。
      

  20.   

    GregorianCalendar gc = new GregorianCalendar();gc.set(Calendar.DAY_OF_MONTH,baseDay);
    gc.add(Calendar.DAY_OF_MONTH,amount);
      

  21.   

    public static String getDayAfter(String baseDate,  int amount) {      Calendar cal=Calendar.getInstance();      String rsltDate=null;   SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");   cal.add(Calendar.DAY_OF_MONTH,amount);
          rsltDate=formatter.format(cal.getTime());      return rsltDate; // 结果}