una seleccionar segundos segundo que pseint programa para minutos lea horas hora diga dias después convertir calcular algoritmo java datetime time

seleccionar - Java: convierte segundos en día, hora, minuto y segundos usando TimeUnit



que lea una hora en hora minutos segundos y diga la hora que es un segundo después (6)

Aquí hay un código que he creado: (Por 3600 segundos muestra "Días: 0 horas: 1 minuto: 0 segundos: 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); } }

Espero que responda tu pregunta.

Estoy usando la clase TimeStamp para convertir segundos en día, horas, minutos, segundos. Utilicé el siguiente código

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

Pero no estoy obteniendo el resultado correcto. Por ejemplo, cuando llamé a este método como calculateTime(3600) me da el resultado como Day 0 Hour 1 Minute 60 Seconds 3540 lugar de Day 0 Hour 1 Minute 0 Seconds 0 .

¿Cuál es el problema con mi lógica? Por favor, ayúdame.


Debería ser como

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

EDITAR Explicación:

  1. El cálculo del día es correcto y no requiere explicación.
  2. TimeUnit.SECONDS.toHours (segundos) le dará conversión directa de segundos a horas sin consideración por los días que ya ha calculado. Menos las horas de días que ya tienes, es decir, día * 24. Ahora tienes las horas restantes.
  3. Lo mismo para el minuto y el segundo. Necesita menos la hora y minutos ya obtenidos, respectivamente.

Método simple:

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


Prueba esto

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


Puede hacer esto solo para usar 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); }

o un poco más corto pero tal vez no tan intuitivo

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


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