添加30天到日期的简单方法

时间:2013-06-14 13:59:42

标签: java date calendar restrictions

我是编程新手(开设计算机科学课程),其中一个练习是让程序读取日期,然后反复打印接下来的30天直到今年年底。

问题是,有限制。我不能使用日期/日历类,只能使用Scanner类。所以我在确定日期方面遇到了一些麻烦...所以我找到的唯一方法就是使用Switch并且每个月都有一个案例,但是那时30/31天的月份和闰年就存在问题。所以日子不一样了。

有更简单的方法吗?

2 个答案:

答案 0 :(得分:0)

如果你不能使用日期/日历类,那么问题的目的是让你做一些日期/日历类在内部做的事情。将switch语句作为答案的一部分,我不会感到惊讶。你需要教你的实现知道一个月有多少天,哪些年是闰年等。

答案 1 :(得分:0)

你可以使用这样的东西,

主要课程:

public class AppMain {

  public static void main(String[] args) {
    MyDate initDate = new MyDate(14, 1, 2012);
    printMyDate(initDate);

    MyDate newDate = initDate;

    do{
      newDate = DateIncrementator.increaseDate(newDate, 30);
      printMyDate(newDate);
    }while(newDate.getYear() == initDate.getYear());

  }

  private static void printMyDate(MyDate date){
    System.out.println("[Day: "+ date.getDay() + "][" + "[Mont: "+ date.getMonth() + "][" + "[Year: "+ date.getYear() + "]");
  }
}

DateIncrementator类:

public class DateIncrementator {
  private static final int[] MONTH_DAYS_NOP_LEAP_YEAR = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

  public static MyDate increaseDate(MyDate date, int numberOfDays){
    if(numberOfDays < 1 || numberOfDays > 30){
      throw new IllegalArgumentException("numberOfDays must have a value between 1 and 30");
    }

    int numberDaysCurrentMonth = MONTH_DAYS_NOP_LEAP_YEAR[date.getMonth() - 1];

    if(date.getMonth() == 2 && isLeapYear(date.getYear())){
      numberDaysCurrentMonth++;
    }

    int newDay = date.getDay();
    int newMonth = date.getMonth();
    int newYear = date.getYear();

    newDay += numberOfDays;

    if(newDay > numberDaysCurrentMonth){
      newDay = newDay % numberDaysCurrentMonth;
      newMonth++;
    }

    if(newMonth > 12){
      newMonth = 1;
      newYear++;
    }

    return new MyDate(newDay, newMonth, newYear);
  }

  private static boolean isLeapYear(int year){
    if(year % 4 != 0){
      return false;
    }

    if(year % 100 != 100){
      return true;
    }

    if(year % 400 == 0){
      return true;
    }else{
      return false;
    }
  }
}

MyDate课程:

public class MyDate {
  private int day; // 1 to 31
  private int month; // 1 to 12
  private int year; // 0 to infinite


  public MyDate(int day, int month, int year) {
    this.day = day;
    this.month = month;
    this.year = year;
  }

  public int getDay() {
    return day;
  }

  public int getMonth() {
    return month;
  }

  public int getYear() {
    return year;
  }  
}