I am writing a simple java class for date calculations, I am aware there are probably better ones out there, but I want to do this myself for practicing purposes. I am planning on expanding this class but I am posting this here mainly because this is the first time I am doing something OOP related and the first time I am using java as well and I want some feedback.
package oop;
public class Date {
private String hour = null;
private String minute = null;
private String second = null;
private String day = null;
private String month = null;
private String year = null;
private String meridiem = null;
public Date(String hour, String minute, String second, String meridiem)
{
this.hour = hour;
this.minute = minute;
this.second = second;
this.meridiem = meridiem;
}
public Date(String day, String month, String year)
{
this.day = day;
this.month = month;
this.year = year;
}
public Date(String hour, String minute, String second, String meridiem, String day, String month, String year)
{
this.hour = hour;
this.minute = minute;
this.second = second;
this.meridiem = meridiem;
this.day = day;
this.month = month;
this.year = year;
}
public String concatenateDate()
{
String fullDate = "";
if(hour != null)
{
fullDate += hour + ":" + minute + ":" + second;
}
if(day != null)
{
if(hour != null) fullDate += " ";
fullDate += day + "/" + month + "/" + year;
}
return fullDate;
}
public int daysUntilNextYear()
{
int nextYear = 0;
int daysLeft = -1;
System.out.println(year != null);
if(year != null)
{
daysLeft = daysDistance(new Date("01", "01", Integer.toString(Integer.parseInt(year)+1)));
}
return daysLeft;
}
private int getDaysGone(int day, int month, int year)
{
int daysGone = day;
if(month == 2) daysGone += 31;
else if(month == 3) daysGone += 59;
else if(month == 4) daysGone += 90;
else if(month == 5) daysGone += 120;
else if(month == 6) daysGone += 151;
else if(month == 7)daysGone += 181;
else if(month == 8)daysGone += 212;
else if(month == 9)daysGone += 243;
else if(month == 10) daysGone +=273;
else if(month == 11)daysGone += 304;
else if(month == 12)daysGone += 334;
if(isLeapYear(year) && month > 2)
{
daysGone ++;
}
return daysGone;
}
private boolean isLeapYear(int year)
{
if(year%400 == 0 || (year%100 != 0 && year%4 == 0 ))
{
return true;
}
else
{
return false;
}
}
public int daysDistance(Date secondDate)
{
int daysDistance = 0;
try
{
int year = Integer.parseInt(this.year);
int month = Integer.parseInt(this.month);
int day = Integer.parseInt(this.day);
int secondYear = Integer.parseInt(secondDate.getYear());
int secondMonth = Integer.parseInt(secondDate.getMonth());
int secondDay = Integer.parseInt(secondDate.getDay());
daysDistance += (secondYear - year) * 365;
daysDistance += (getDaysGone(secondDay, secondMonth, secondYear) - getDaysGone(day, month, year) -1);
daysDistance = Math.abs(daysDistance);
if(secondYear > year)
{
for(int i = year+1; i < secondYear; i++)
{
if(isLeapYear(i))
{
daysDistance ++;
}
}
if(isLeapYear(year) && month < 3) daysDistance++;
if(isLeapYear(secondYear) && secondMonth > 3) daysDistance++;
}
else if(secondYear == year)
{
if(secondMonth > month)
{
if(isLeapYear(year) && month < 3 && secondMonth > 3) daysDistance ++;
}
else
{
if(isLeapYear(year) && month > 3 && secondMonth < 3) daysDistance ++;
}
}
else
{
for(int i = secondYear+1; i < year; i++)
{
if(isLeapYear(i))
{
daysDistance ++;
}
}
if(isLeapYear(year) && month > 3) daysDistance ++;
if(isLeapYear(secondYear) && secondMonth < 3) daysDistance++;
}
}
catch(Exception e)
{
daysDistance = -1;
}
return daysDistance;
}
public int secondsUntilDate(Date secondDate)
{
int secondsLeft = 0;
try
{
secondsLeft += (daysDistance(secondDate)) * 86400;
secondsLeft += 86400 - (Integer.parseInt(hour)*3600 + Integer.parseInt(second)) ;
}
catch(Exception e)
{
secondsLeft = -1;
}
return secondsLeft;
}
public String getDay()
{
return day;
}
public String getMonth()
{
return month;
}
public String getYear()
{
return year;
}
public String getHour()
{
return hour;
}
public String getMinute()
{
return minute;
}
public String getSecond()
{
return second;
}
public String getMeridiem()
{
return meridiem;
}
}