Reputation: 1
my problem is that i am unable to get the days correctly. help me out!
here is my code.
package basic.programs;
import java.util.Scanner;
public class MinutesToYearDaysConversion {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int Minutes, Years, MinutesRemain, Days, MinutesRemainAfterDays, Hours, MinutesRemainAfterHours;
System.out.print("give the minutes : ");
Minutes = sc.nextInt();
Years = Minutes / 535600;
MinutesRemain = Minutes % ( 535600);
Days = MinutesRemain / 1440;
MinutesRemainAfterDays = MinutesRemain % (1440 );
Hours = MinutesRemainAfterDays / 60;
MinutesRemainAfterHours = MinutesRemainAfterDays % (60);
System.out.print("Given minutes has" + Years + "years" + Days + "days" + Hours + "hours and " + MinutesRemainAfterHours + "minutes ");
}
}
output :-
give the minutes : 3000010
Given minutes has 5 years 223 days14 hours and 50 minutes
// Write a Java program to convert minutes into the number of years, days, hours and minute.
// Ex : Input : minutes = 3000010 Output : Given minutes has 5 years 258 days 8 hours and 10 minutes
i tried to input the same minutes that the problem gave as an example to check if my code runs correctly or not.
so where am i missing.
Upvotes: 0
Views: 1000
Reputation: 79015
I recommend you do it using java.time.Duration
. I also recommend you follow Java Naming Conventions e.g. your variables, Minutes, Years, MinutesRemain
etc. should be named as minutes, years, minutesRemain
etc.
import java.time.Duration;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter minutes: ");
int mins = sc.nextInt();
Duration d = Duration.ofMinutes(mins);
long days = d.toDaysPart();
long hours = d.toHoursPart();
long minutes = d.toMinutesPart();
System.out.print("Given minutes has " + days / 365 + " years " + days % 365 + " days " + hours + " hours and "
+ minutes + " minutes.");
}
}
A sample run:
Enter minutes: 3000010
Given minutes has 5 years 258 days 8 hours and 10 minutes.
Learn more about the modern date-time API at Trail: Date Time.
Upvotes: 1
Reputation: 201429
That is a lot of magic numbers for functionality that Java includes in TimeUnit
. Unfortunately, it doesn't provide a toYears()
(and your math assumes one year is exactly 365 days). Anyway, that could be done with something like
Scanner sc = new Scanner(System.in);
System.out.print("give the minutes : ");
int origMinutes = sc.nextInt();
long days = TimeUnit.MINUTES.toDays(origMinutes);
long years = days / 365;
days -= years * 365;
long hours = TimeUnit.MINUTES.toHours(origMinutes
- TimeUnit.DAYS.toMinutes(years * 365)
- TimeUnit.DAYS.toMinutes(days));
long minutes = origMinutes
- TimeUnit.DAYS.toMinutes(years * 365)
- TimeUnit.DAYS.toMinutes(days)
- TimeUnit.HOURS.toMinutes(hours);
System.out.printf("Given minutes has %d years %d days %d hours and %d minutes%n",
years, days, hours, minutes);
Running with your sample input, yields your sample output.
give the minutes : 3000010
Given minutes has 5 years 258 days 8 hours and 10 minutes
Upvotes: 2
Reputation: 31
In one year there are 525600 minutes, not 535600.
Years = Minutes / 525600;
MinutesRemain = Minutes % ( 525600);
Upvotes: 1