MK Reddy
MK Reddy

Reputation: 1

Minutes To Years ,Days , Hours and Miniutes convereter

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

Answers (3)

Arvind Kumar Avinash
Arvind Kumar Avinash

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

Elliott Frisch
Elliott Frisch

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

Davide Tenedini
Davide Tenedini

Reputation: 31

In one year there are 525600 minutes, not 535600.

Years = Minutes / 525600;
MinutesRemain =  Minutes % ( 525600);

Upvotes: 1

Related Questions