Подтвердить что ты не робот

Java: конвертировать секунды в день, час, минуту и ​​секунды с помощью TimeUnit

Я использую TimeStamp класс для преобразования секунд в День, Часы, Минуты, Секунды. Я использовал следующий код

public static void calculateTime(long seconds) {
        int day = (int)TimeUnit.SECONDS.toDays(seconds);        
        long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.SECONDS.toHours(TimeUnit.SECONDS.toDays(seconds));
        long minute = TimeUnit.SECONDS.toMinutes(seconds) - TimeUnit.SECONDS.toMinutes(TimeUnit.SECONDS.toHours(seconds));
        long second = TimeUnit.SECONDS.toSeconds(seconds) - TimeUnit.SECONDS.toSeconds(TimeUnit.SECONDS.toMinutes(seconds));

        System.out.println("Day " + day + " Hour " + hours + " Minute " + minute + " Seconds " + second);

    }

Но я не получаю правильный результат. Например, когда я назвал этот метод как calculateTime(3600), он дает мне результат Day 0 Hour 1 Minute 60 Seconds 3540 вместо Day 0 Hour 1 Minute 0 Seconds 0.

Что случилось с моей логикой? Пожалуйста, помогите мне.

4b9b3361

Ответ 1

Это должно быть как

 int day = (int)TimeUnit.SECONDS.toDays(seconds);        
 long hours = TimeUnit.SECONDS.toHours(seconds) - (day *24);
 long minute = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds)* 60);
 long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) *60);

ИЗМЕНИТЬ Объяснение:

  • Правильный расчет дня не требует объяснений.
  • TimeUnit.SECONDS.toHours(секунды) даст вам прямое преобразование от секунд до часа без учета в течение дней, которые вы уже рассчитали. Минус часов в течение нескольких дней, которые у вас уже есть, день * 24. Теперь у вас осталось несколько часов.
  • То же самое для минуты и секунды. Вам нужно минус уже пройденный час и минуты соответственно.

Ответ 2

Вы можете сделать так, чтобы использовать только TimeUnit:

public static void calculateTime(long seconds) {
    int day = (int) TimeUnit.SECONDS.toDays(seconds);
    long hours = TimeUnit.SECONDS.toHours(seconds) -
                 TimeUnit.DAYS.toHours(day);
    long minute = TimeUnit.SECONDS.toMinutes(seconds) - 
                  TimeUnit.DAYS.toMinutes(day) -
                  TimeUnit.HOURS.toMinutes(hours);
    long second = TimeUnit.SECONDS.toSeconds(seconds) -
                  TimeUnit.DAYS.toSeconds(day) -
                  TimeUnit.HOURS.toSeconds(hours) - 
                  TimeUnit.MINUTES.toSeconds(minute);
    System.out.println("Day " + day + " Hour " + hours + " Minute " + minute + " Seconds " + second);
}

или немного короче, но, возможно, не интуитивно понятным

public static void calculateTime(long seconds) {
    int day = (int) TimeUnit.SECONDS.toDays(seconds);
    long hours = TimeUnit.SECONDS.toHours(seconds) -
                 TimeUnit.DAYS.toHours(day);
    long minute = TimeUnit.SECONDS.toMinutes(seconds) -
                  TimeUnit.HOURS.toMinutes(TimeUnit.SECONDS.toHours(seconds));
    long second = TimeUnit.SECONDS.toSeconds(seconds) -
                  TimeUnit.MINUTES.toSeconds(TimeUnit.SECONDS.toMinutes(seconds));
    System.out.println("Day " + day + " Hour " + hours + " Minute " + minute + " Seconds " + second);
}

Ответ 3

Простой метод:

public static void calculateTime(long seconds) {
    long sec = seconds % 60;
    long minutes = seconds % 3600 / 60;
    long hours = seconds % 86400 / 3600;
    long days = seconds / 86400;

    System.out.println("Day " + days + " Hour " + hours + " Minute " + minutes + " Seconds " + sec);
}

Ответ 4

Вот код, который я создал: (В течение 3600 секунд он показывает "Дни: 0 часов: 1 минута: 0 секунд: 0" )

public class TimeConvert 
{
    public static void main(String[] args) 
    {
        int fsec,d,h,m,s,temp=0,i;
        fsec=3600;
        //For Days
        if(fsec>=86400)
        {
            temp=fsec/86400;
            d=temp;
            for(i=1;i<=temp;i++)
            {
                fsec-=86400;
            }
        }
        else
        {
            d=0;
        }
        //For Hours
        if(fsec>=3600)
        {
            temp=fsec/3600;
            h=temp;
            for(i=1;i<=temp;i++)
            {
                fsec-=3600;
            }            
        }
        else
        {
            h=0;
        }
        //For Minutes
        if(fsec>=60)
        {
            temp=fsec/60;
            m=temp;
            for(i=1;i<=temp;i++)
            {
                fsec-=60;
            }            
        }
        else
        {
            m=0;
        }
        //For Seconds
        if(fsec>=1)
        {
            s=fsec;            
        }
        else
        {
            s=0;
        }
        System.out.println("Days:"+d+" Hours:"+h+" Minutes:"+m+" Seconds:"+s);
    }
}

Надеюсь, он ответит на ваш вопрос.

Ответ 5

Поздно, но полезно

получить время в формате 00:00:00

/**
     * The time in format.
     *
     * in The Format of 00:00:00
     */

public String getTimeInFormat(long _SECONDS)
{
    if(TimeUnit.SECONDS.toHours(_SECONDS)>0)
    {
        return  String.format("%02d:%02d:%02d",
                TimeUnit.SECONDS.toHours(_SECONDS),
                TimeUnit.SECONDS.toMinutes(_SECONDS) -
                        TimeUnit.HOURS.toMinutes(TimeUnit.SECONDS.toHours(_SECONDS)),
                TimeUnit.SECONDS.toSeconds(_SECONDS) -
                        TimeUnit.MINUTES.toSeconds(TimeUnit.SECONDS.toMinutes(_SECONDS)));
    }
    else {
        return  String.format("%02d:%02d",
                TimeUnit.SECONDS.toMinutes(_SECONDS) -
                        TimeUnit.HOURS.toMinutes(TimeUnit.SECONDS.toHours(_SECONDS)),
                TimeUnit.SECONDS.toSeconds(_SECONDS) -
                        TimeUnit.MINUTES.toSeconds(TimeUnit.SECONDS.toMinutes(_SECONDS)));
    }

}

Ответ 6

Попробуйте это

public static void calculateTime(long seconds) {

int day = (int)TimeUnit.SECONDS.toDays(seconds);        
long hours = TimeUnit.SECONDS.toHours(seconds) ;

long tempSec = seconds - (TimeUnit.HOURS.toSeconds(hours) );
System.out.println("after hours calculation "+ tempSec);

long minute = TimeUnit.SECONDS.toMinutes(tempSec); 

if(tempSec > TimeUnit.MINUTES.toSeconds(minute)){
    tempSec = tempSec - (TimeUnit.MINUTES.toSeconds(minute) );          
}else{
    tempSec = TimeUnit.MINUTES.toSeconds(minute) - tempSec;
}
System.out.println("after min calculation "+ tempSec);


long second = TimeUnit.SECONDS.toSeconds(tempSec) ;

System.out.println("Day " + day + " Hour " + hours + " Minute " + minute + " Seconds " + second);
}

Ответ 7

Это мой код:

public static String secondsToString(TimeUnit greatestUnit, long sourceDuration, TimeUnit sourceUnit) {

    int ordinal = greatestUnit.ordinal();
    if(ordinal<=sourceUnit.ordinal())
        return String.format("%02d", sourceDuration);

    final long greatestDuration = greatestUnit.convert(sourceDuration, sourceUnit);
    final long rest = sourceDuration - sourceUnit.convert(greatestDuration, greatestUnit);

    return String.format("%02d:", greatestDuration) + secondsToString(TimeUnit.values()[--ordinal], rest, sourceUnit);
}

или по петле

public static String secondsToStringByLoop(TimeUnit greatestUnit, long sourceDuration, TimeUnit sourceUnit) {

    final StringBuffer sb = new StringBuffer();
    int ordinal = greatestUnit.ordinal();

    while(true){
        if(ordinal<=sourceUnit.ordinal()) {
            sb.append(String.format("%02d", sourceDuration));
            break;
        }

        final long greatestDuration = greatestUnit.convert(sourceDuration, sourceUnit);
//          if(greatestDuration>0 || sb.length()>0)
        sb.append(String.format("%02d:", greatestDuration));

        sourceDuration -= sourceUnit.convert(greatestDuration, greatestUnit);
        greatestUnit = TimeUnit.values()[--ordinal];
    };

    return sb.toString();
}

пример использования:

String str = secondsToString(TimeUnit.DAYS, 1000, TimeUnit.SECONDS);

функция возвращает: "00: 00: 16: 40" (дни: часы: минуты: секунды)

str = UnitsConverter.secondsToString(TimeUnit.DAYS, 1000, TimeUnit.MINUTES);

возвращает: "00:16:40" (дни: часы: минуты)

str = UnitsConverter.secondsToString(TimeUnit.MINUTES, 1000, TimeUnit.SECONDS);

возвращает: "16:40" (минуты: секунды)

Ответ 8

public static void timeCalculator(){


      Scanner input = new Scanner(System.in);
      System.out.print("Enter length of time in seconds: ");
      int n = input.nextInt();
      int nDay = n/86400;
      int nHours = (n%86400)/3600;
      int nMin = ((n%86400)%3600) /60;
      int nSec =(((n%86400)%3600)%60);
      System.out.println();
      System.out.print("That is "+ nDay+ " day(s),"+nHours+"  hour(s), "+nMin+"  minute(s), and "+nSec+" second(s). ");
}