Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Date {
- private int day;
- private int month;
- private int year;
- public Date(int year, int month, int day) {
- if (!validDate(year, month, day)) {
- throw new IllegalArgumentException("Not a valid date");
- }
- this.day = day;
- this.month = month;
- this.year = year;
- }
- public void incrementOneDay() {
- day += 1;
- if (day == 32 && month == 1) {
- day = 1;
- month = 2;
- } else if (day == 29 && month == 2 && !isLeapyear(year)) {
- day = 1;
- month = 3;
- } else if (day == 30 && month == 2 && isLeapyear(year)) {
- day = 1;
- month = 3;
- } else if (day == 32 && month == 3) {
- day = 1;
- month = 4;
- } else if (day == 31 && month == 4) {
- day = 1;
- month = 5;
- } else if (day == 32 && month == 5) {
- day = 1;
- month = 6;
- } else if (day == 31 && month == 6) {
- day = 1;
- month = 7;
- } else if (day == 32 && month == 7) {
- day = 1;
- month = 8;
- } else if (day == 32 && month == 8) {
- day = 1;
- month = 9;
- } else if (day == 31 && month == 9) {
- day = 1;
- month = 10;
- } else if (day == 32 && month == 10) {
- day = 1;
- month = 11;
- } else if (day == 31 && month == 11) {
- day = 1;
- month = 12;
- } else if (day == 32 && month == 12) {
- day = 1;
- month = 1;
- year += 1;
- }
- }
- public void incrementNDays(int n) {
- for (int i = 1; i <= n; i++) {
- incrementOneDay();
- }
- }
- public void decrementOneDay() {
- day -= 1;
- if (day == 0) {
- if (month == 1) {
- day = 31;
- month = 12;
- year += -1;
- } else if (month == 2) {
- day = 31;
- month = 1;
- } else if (month == 3) {
- if (isLeapyear(year)) {
- day = 29;
- month = 2;
- } else {
- day = 28;
- month = 2;
- }
- } else if (month == 4) {
- day = 31;
- month = 3;
- } else if (month == 5) {
- day = 30;
- month = 4;
- } else if (month == 6) {
- day = 31;
- month = 5;
- } else if (month == 7) {
- day = 30;
- month = 6;
- } else if (month == 8) {
- day = 31;
- month = 7;
- } else if (month == 9) {
- day = 31;
- month = 8;
- } else if (month == 10) {
- day = 30;
- month = 9;
- } else if (month == 11) {
- day = 31;
- month = 10;
- } else if (month == 12) {
- day = 30;
- month = 11;
- }
- }
- }
- public void decrementNDays(int n) {
- for (int i = 1; i <= n; i++) {
- decrementOneDay();
- }
- }
- public static boolean isLeapyear(int year) {
- return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
- }
- public static int daysBetweenDates(Date dateOne, Date dateTwo) {
- int numDays = 0;
- boolean date1Smaller = true;
- Date date1 = new Date(dateOne.getYear(), dateOne.getMonth(),
- dateOne.getDay());
- Date date2 = new Date(dateTwo.getYear(), dateTwo.getMonth(),
- dateTwo.getDay());
- if (date1.getYear() > date2.getYear()) {
- date1Smaller = false;
- } else if (date1.getYear() < date2.getYear()) {
- date1Smaller = true;
- } else if (date1.getMonth() < date2.getMonth()) {
- date1Smaller = true;
- } else if (date1.getMonth() > date2.getMonth()) {
- date1Smaller = false;
- } else if (date1.getDay() < date2.getDay()) {
- date1Smaller = true;
- } else if (date1.getDay() > date2.getDay()) {
- date1Smaller = false;
- } else {
- return 0;
- }
- while (!date1.toString().equals(date2.toString())) {
- numDays++;
- if (date1Smaller) {
- date1.incrementOneDay();
- } else {
- date1.decrementOneDay();
- }
- }
- return numDays;
- }
- public static boolean validDate(int year, int month, int day) {
- if (day < 1 || day > 31) {
- return false;
- }
- if (month < 1 || month > 12) {
- return false;
- }
- if (year < 0) {
- return false;
- }
- if (day == 31
- && (month == 2 || month == 4 || month == 6 || month == 9 || month == 11)) {
- return false;
- }
- if (day > 28 && month == 2 && !isLeapyear(year)) {
- return false;
- }
- if (day > 29 && month == 2 && isLeapyear(year)) {
- return false;
- }
- return true;
- }
- public int getMonth() {
- return month;
- }
- public int getYear() {
- return year;
- }
- public int getDay() {
- return day;
- }
- public String toString() {
- String dateString = year + "/" + month + "/" + day;
- return dateString;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement