Explanation :
1)If input = 12/12/1995 then output will be 11/12/1995.
2)If input = 1/1/1995 then output will be 31/12/1994.
3)If input = 31/11/1995 then output will be Invalid as November has only 30 days.
4)If input = 29/02/1995 then output will be Invalid as 1995 is not a Leap year.
5)If input = 1/03/1996 then output will be 29/02/1996 as 1996 is a Leap year.
Code:
import java.util.*;
public class Previousday
{
public static void display(int d,int m,int y)
{
System.out.print("Previous day of Entered date is:"+d+ "-"+m+"-"+y);
}
public static void main(String args[])
{
System.out.println("Enter the date in DD-MM-YYYY Format:");
Scanner sc=new Scanner(System.in);
String s=sc.next();
sc.close();
StringTokenizer st=new StringTokenizer(s,"-/ ");
int d=Integer.parseInt(st.nextToken());
int m=Integer.parseInt(st.nextToken());
int y=Integer.parseInt(st.nextToken());
if(d==1)
{
if(m==1)
{
d=31;m=12;y=y-1;display(d,m,y);
}
else if(m==3)
{
if((y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0)))
{
d=29;m-=1;display(d,m,y);
}
else
{
d=28;m-=1;display(d,m,y);
}
}
else if(m==2 || m==4 ||m==6 ||m==8 ||m==9 || m==11)
{
d=31;m=m-1;display(d,m,y);
}
else if(m==5||m==7||m==10||m==12)
{
d=30;m=m-1;display(d,m,y);
}
else System.out.print("Invalid date Format");
}
else if(d>1 && d<=31)
{
if(m==2 && d<=29)
{
if(d==29)
{
if((y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0)))
{
d=d-1;display(d,m,y);
}
else System.out.print("Invalid date Format");
}
else
{
d=d-1;display(d,m,y);
}
}
else if((m==1 ||m==3||m==5||m==7||m==8||m==10||m==12) && d<=31)
{
d=d-1;display(d,m,y);
}
else if((m==4||m==6||m==9||m==11) && d<=30)
{
d=d-1;display(d,m,y);
}
else System.out.print("Invalid date Format");
}
else System.out.print("Invalid date Format");
}
}