Преобразователь минут в годы, дни, часы и минуты

моя проблема в том, что я не могу правильно определить дни. Помоги мне!

вот мой код.

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 ");
    }
}

выход :-

give the minutes : 3000010
Given minutes has 5 years 223 days14 hours and 50 minutes 

// Напишите Java-программу для преобразования минут в количество лет, дней, часов и минут.
// Пример: Ввод: минуты = 3000010 Вывод: данные минуты состоят из 5 лет 258 дней 8 часов и 10 минут.

я попытался ввести те же минуты, что и проблема, в качестве примера, чтобы проверить, правильно ли работает мой код.

так где я пропал.


person MK Reddy    schedule 28.11.2020    source источник
comment
Почему вы указываете количество минут в скобках после операции остатка Minutes % ( 535600)?   -  person NomadMaker    schedule 28.11.2020
comment
Вы проверяете високосные годы?   -  person NomadMaker    schedule 28.11.2020
comment
В соглашениях об именах Java классы начинаются с заглавной буквы; переменные и методы начинаются со строчных букв (минуты, годы и т. д.).   -  person NomadMaker    schedule 28.11.2020
comment
Кажется, опечатка в количестве минут в году: 1440 * 365 = 525_600, однако, если считать 365,25 дней в году, может быть: 525_960 минут в году.   -  person Alex Rudenko    schedule 28.11.2020
comment
MK Reddy. Если один из ответов решил вашу проблему, вы можете помочь сообществу, отметив его как принятый. Принятый ответ помогает будущим посетителям уверенно использовать решение. Чтобы отметить ответ как принятый, вам нужно нажать на большую галочку (✓) слева от отвечать. Примечание. вы можете принять только один ответ на вопрос. Однако, как только у вас будет 15+ очков репутации, вы сможете проголосовать за любое количество ответов.   -  person Arvind Kumar Avinash    schedule 29.11.2020


Ответы (3)


Это множество магических чисел для функциональности, которую Java включает в TimeUnit. К сожалению, он не дает toYears() (и ваша математика предполагает, что в году ровно 365 дней). Во всяком случае, это можно сделать с помощью чего-то вроде

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);

Запуск с вашим образцом ввода дает ваш образец вывода.

give the minutes : 3000010
Given minutes has 5 years 258 days 8 hours and 10 minutes
person Elliott Frisch    schedule 28.11.2020

В году 525600 минут, а не 535600.

Years = Minutes / 525600;
MinutesRemain =  Minutes % ( 525600);
person Davide Tenedini    schedule 28.11.2020

Я рекомендую вам сделать это с помощью java.time.Duration. Я также рекомендую вам следовать соглашениям об именах Java< /сильный> например ваши переменные, Minutes, Years, MinutesRemain и т. д. должны называться как minutes, years, minutesRemain и т. д.

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.");
    }
}

Пример запуска:

Enter minutes: 3000010
Given minutes has 5 years 258 days 8 hours and 10 minutes.

Узнайте больше о современном API даты и времени на странице Trail: Date Time< /а>.

person Arvind Kumar Avinash    schedule 28.11.2020
comment
Чем ваш ответ отличается от моего, опубликованного на 10 минут раньше вашего, кроме того, что в вашем больше слов? - person Abhijit Sarkar; 28.11.2020
comment
@AbhijitSarkar - Позвольте мне проверить ваш ответ. - person Arvind Kumar Avinash; 28.11.2020
comment
@AbhijitSarkar - Вы пытались скомпилировать свой код? Не существует такого метода, как Duration#toYears. Идея должна быть опубликована в виде комментария (как это уже сделали многие другие участники), а не в виде ответа. - person Arvind Kumar Avinash; 28.11.2020
comment
Ты прав. Я не компилировал, но я проверил Javadoc и подумал, что увидел метод. У меня нет времени компилировать код для каждой домашней работы, размещенной на этом сайте. - person Abhijit Sarkar; 28.11.2020