1. Calculate the last day of Next month
  Input: a date (including: year, month, day)
  Output: last day of next month (including: year,month, day)
  E.g. input: 2010/10/15; output: 2010/11/30
2. Test your program systemically. Write your testing cases.求一个完整的编程。谢谢。

解决方案 »

  1.   


     好吧,input的年月日都这么存放的:
     inYear = ...
     inMonth = ...(1~12)
     inDay = ...(1~28,29...) 下个月的计算:
      if (inMonth == 12) {
          inYear++;
      }
      switch (inMonth){
      case 1: return is闰年(inYear)?:29:28;
      case 2,4,6,7,9,11: return 31;
      default: return 30;
    }
      

  2.   

    不好意思 没看清楚输出格式输入偶还是不管了
     inYear = ...
     inMonth = ...(1~12)
     inDay = ...(1~28,29...) switch (inMonth){
     case 1: return is闰年inYear)? inYear+"/2/29":inYear+"/2/28";
     case 2,4,6,7,9,11: return inYear+"/"+(inMonth+1)+"/31";
     case 12: return (inYear+1)+"/1/31";
     default: return inYear+"/"+(inMonth+1)+"/30";
     }
      

  3.   

    楼上的太多余了.使用Calendar类,得到下下个月,然后减一天就行了.
    String aa="2010/10/15";
    SimpleDateFormat f1=new SimpleDateFormat("yyyy/MM/dd");
    Calendar c = Calendar.getInstance();
    c.setTime(f1.parse(aa));
    c.add(c.MONTH,2);//加两个月
    c.set(c.DAY_OF_MONTH,1);//设置为1号
    c.add(c.DAY_OF_MONTH,-1);//减1天;
    System.out.println(f1.format(c.getTime()));
      

  4.   

    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;public class DateUtil {
    private static Map<String, SimpleDateFormat> map=new HashMap<String, SimpleDateFormat>();
    public static final String dateFormat ="yyyy-MM-dd";

    private static SimpleDateFormat getSimpleDateFormat(String dateFormat){
    SimpleDateFormat sf=map.get(dateFormat);
    if(sf==null){
    sf=new SimpleDateFormat(dateFormat);
    map.put(dateFormat, sf);
    }
    return sf;
    }

    /**
     * 获取与给定日期参数相差天的日期
     * @param date
     * @param differdays
     * @return
     */
    public static Date newDate(Date srcDate,int differdays){
    Date date = new Date(srcDate.getTime());
    if(date==null){
    return new Date();
    }
    date.setDate(date.getDate()+differdays);
    return date;
    }

    /**
     * 根据传入的日期,格式化为指定的日期格式
     * @param date 日期参数
     * @param dateFormat 格式 例如:yyyy-MM-dd
     * @return
     */
    public static String dateToString(Date date,String dateFormat){
    try{
    if(date==null){
    return "";
    }
    SimpleDateFormat df=getSimpleDateFormat(dateFormat);
    return df.format(date);
    }catch(Exception e){
    e.printStackTrace();
    }
    return null;
    }

    /**
     * 将日期转化为字符串,默认格式为yyyy-MM-dd
     * @param date
     * @return
     */
    public static String dateToString(Date date){
    try{
    if(date==null){ return ""; }
    SimpleDateFormat df=getSimpleDateFormat("yyyy-MM-dd");
    return df.format(date);
    }catch(Exception e){
    e.printStackTrace();
    }
    return null;
    }
    /**
     * 根据传入的日期,可根据differdays 参数设置到另一日期,再格式化日期
     * @param date 日期参数
     * @param differdays 与给定的日期相差天数 负数表示指定日期前多少天 正数表示日期后多少天
     * @param dateFormat 格式 例如:yyyy-MM-dd
     * @return
     */
    @SuppressWarnings("deprecation")
    public static String dateToString(Date srcDate,int differdays,String dateFormat){
    Date date = new Date(srcDate.getTime());
    date.setDate(date.getDate()+differdays);
    try{
    SimpleDateFormat df=getSimpleDateFormat(dateFormat);
    return df.format(date);
    }catch(Exception e){
    e.printStackTrace();
    }
    return null;
    }

    /**
     * 获取指定参数在一年中所处的周期
     * @param date
     * @param differdays
     * @return
     */
    public static String getWeek(Date srcDate,int differdays){
    Date date = new Date(srcDate.getTime());
    date.setDate(date.getDate()+differdays);
    java.text.SimpleDateFormat sd=getSimpleDateFormat("w"); 
    return sd.format(date); 
    }

    /**
     * 根据给定日期,按需要转换的格式转换成字符串
     * @param dateString
     * @param dateFormat
     * @return
     */
    public static Date stringToDate(String dateString,String dateFormat){
    try{
    if(StringUtil.isEmpty(dateString)){
    return new Date();
    }
    SimpleDateFormat df=getSimpleDateFormat(dateFormat);
    return df.parse(dateString);
    }catch(Exception e){
    e.printStackTrace();
    }
    return new Date();
    }

    /**
     * 获取一月中的最后一天
     * @param date
     * @param differdays
     * @return
     */
    public static Date getLastDayOfMonth(Date srcDate,int differdays) { 
    Date date = new Date(srcDate.getTime());
    date.setDate(date.getDate()+differdays);
    Calendar cDay1 = Calendar.getInstance(); 
        cDay1.setTime(date); 
        final int lastDay = cDay1.getActualMaximum(Calendar.DAY_OF_MONTH); 
        Date lastDate = cDay1.getTime(); 
        lastDate.setDate(lastDay); 
        return lastDate; 
    }

    /**
     * 获取一月中的第一天
     * @param date
     * @param differdays
     * @return
     */
    public static Date getFirstDayOfMonth(Date srcDate,int differdays) { 
    Date date = new Date(srcDate.getTime());
    date.setDate(date.getDate()+differdays);
    Calendar cDay1 = Calendar.getInstance(); 
        cDay1.setTime(date); 
        final int lastDay = cDay1.getActualMinimum(Calendar.DAY_OF_MONTH); 
        Date lastDate = cDay1.getTime(); 
        lastDate.setDate(lastDay); 
        return lastDate; 
    }

    /**
     * 获取给定日期所在周的第一天的时间
     * @param date
     * @param differdays
     * @return
     */
    public static Date getFirstDayOfWeek(Date srcDate,int differdays) {
    Date date = new Date(srcDate.getTime());
    date.setDate(date.getDate()+differdays);
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(date);
    Date firstDateOfWeek;  // 得到当天是这周的第几天  
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);  // 减去dayOfWeek,得到第一天的日期,因为Calendar用0-6代表一周七天,所以要减一  
    calendar.add(Calendar.DAY_OF_WEEK, -(dayOfWeek - 1));  
    firstDateOfWeek = calendar.getTime();  // 每周7天,加6,得到最后一天的日子  
    return firstDateOfWeek;


    /**
     * 获取一周中的最后一天
     * @param date
     * @param differdays
     * @return
     */
    public static Date getLastDayOfWeek(Date srcDate,int differdays) { 
    Date date = new Date(srcDate.getTime());
    date.setDate(date.getDate()+differdays);
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(date);
    Date lastDateOfWeek;  // 得到当天是这周的第几天  
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);  // 减去dayOfWeek,得到第一天的日期,因为Calendar用0-6代表一周七天,所以要减一  
    calendar.add(Calendar.DAY_OF_WEEK, -(dayOfWeek - 1));  
    calendar.add(Calendar.DAY_OF_WEEK, 6);  
    lastDateOfWeek = calendar.getTime();  
    return lastDateOfWeek;


    /**
     * 获取一年中的第一个月
     * @param date
     * @param differmonths
     * @return
     */
    public static Date getFirstMonthOfYear(Date srcDate,int differmonths){
    Date date = new Date(srcDate.getTime());
    date.setMonth(date.getMonth()+differmonths);
    Calendar cDay1 = Calendar.getInstance(); 
        cDay1.setTime(date); 
    date.setDate(cDay1.getActualMinimum(Calendar.DAY_OF_MONTH));
    date.setMonth(cDay1.getActualMinimum(Calendar.MONTH));
    return getFirstSecondOfOneDay(date);
    }

    /**
     * 获取一年中的最后一月
     * @param date
     * @param differmonths
     * @return
     */
    public static Date getLastMonthOfYear(Date srcDate,int differmonths){
    Date date = new Date(srcDate.getTime());
    date.setMonth(date.getMonth()+differmonths);
    Calendar cDay1 = Calendar.getInstance(); 
        cDay1.setTime(date); 
    date.setDate(cDay1.getActualMaximum(Calendar.DAY_OF_MONTH));
    date.setMonth(cDay1.getActualMaximum(Calendar.MONTH));
    return getLastSecondOfOneDay(date);
    }

    /**
     * 获取一天中的第一秒时间
     * @param date
     * @return
     */
    public static Date getFirstSecondOfOneDay(Date srcDate){
    Date date = new Date(srcDate.getTime());
    Calendar c = Calendar.getInstance();
    date.setHours(c.getActualMinimum(Calendar.HOUR_OF_DAY));
    date.setMinutes(c.getActualMinimum(Calendar.MINUTE));
    date.setSeconds(c.getActualMinimum(Calendar.SECOND));
    return date;
    }

    /**
     * 获取一天中最后一秒时间
     * @param date
     * @return
     */
    public static Date getLastSecondOfOneDay(Date srcDate){
    Date date = new Date(srcDate.getTime());
    Calendar c = Calendar.getInstance();
    date.setHours(c.getActualMaximum(Calendar.HOUR_OF_DAY));
    date.setMinutes(c.getActualMaximum(Calendar.MINUTE));
    date.setSeconds(c.getActualMaximum(Calendar.SECOND));
    return date;
    }

    public static void main(String[] args){
    Date date = new Date();
    date = getFirstMonthOfYear(date,0);
    System.out.println(date.toLocaleString());
    }
    }