una termina son saber regular periodo mujer mis menstrual menstruacion fértiles días duracion dura dias cómo cuánto cuáles cuantos cuanto cuando circulo ciclo cada java time

java - termina - Cómo calcular la próxima semana?



duracion del ciclo menstrual regular (4)

Quiero calcular con precisión el tiempo de una semana a partir de una fecha determinada, pero la salida que recibo es una hora antes.

código:

long DURATION = 7 * 24 * 60 * 60 * 1000; System.out.println(" now: " + new Date(System.currentTimeMillis())); System.out.println("next week: " + new Date(System.currentTimeMillis() + DURATION));

salida:

now: Wed Sep 16 09:52:36 IRDT 2015 next week: Wed Sep 23 08:52:36 IRST 2015

¿Cómo puedo calcular esto correctamente?


La diferencia se debe a la diferente zona horaria. IRDT es +0430 e IRST es +0330

Para superar este problema, puede utilizar JodaTime .

LocalDateTime now = LocalDateTime.now(); LocalDateTime nextweek = now.plusDays(7); System.out.println(now); System.out.println(nextweek);


Prueba esto

Calendar cal = Calendar.getInstance(); System.out.println(cal.getTime()); cal.add(Calendar.DAY_OF_MONTH, 7); System.out.println(cal.getTime());


Nunca confíe en la aritmética de milisegundos, hay demasiadas reglas y errores para que valga la pena (incluso en un lapso de tiempo pequeño), en su lugar utilice una biblioteca dedicada, como Time API de Java 8, JodaTime o incluso Calendar

Java 8

LocalDateTime now = LocalDateTime.now(); LocalDateTime then = now.plusDays(7); System.out.println(now); System.out.println(then);

Que salidas

2015-09-16T15:34:14.771 2015-09-23T15:34:14.771

JodaTime

LocalDateTime now = LocalDateTime.now(); LocalDateTime then = now.plusDays(7); System.out.println(now); System.out.println(then);

Que salidas

2015-09-16T15:35:19.954 2015-09-23T15:35:19.954

Calendario

Cuando no puedes usar Java 8 o JodaTime

Calendar cal = Calendar.getInstance(); Date now = cal.getTime(); cal.add(Calendar.DATE, 7); Date then = cal.getTime(); System.out.println(now); System.out.println(then);

Que salidas

Wed Sep 16 15:36:39 EST 2015 Wed Sep 23 15:36:39 EST 2015

nb: El "problema" que parece tener, no es un problema en absoluto, sino simplemente el hecho de que durante el período, su zona horaria parece haber ingresado / salido de ahorro de luz diurna, por lo que Date muestra la hora, con es la compensación correcta


Como otros dijeron. Sería mejor usar la biblioteca Calendario o JodaTime. Pero la pregunta es por qué no obtuviste el resultado deseado. Fue porque currentTimeMillis() calcula el tiempo entre "hora de la computadora" y hora universal coordinada (UTC). Ahora considera seguir el caso.

long DURATION = 7 * 24 * 60 * 60 * 1000; Date now = new Date(); Date nextWeek = new Date(now.getTime() + DURATION); System.out.println(" now: " + now); System.out.println("next week: " + nextWeek);

aquí Date.getTime() calcula el tiempo a partir de las 00:00:00 GMT cada vez y luego, al convertirlo a cadena, dará tiempo para su zona horaria local.

Editar: estaba equivocado. La razón es como dijo Simon .

El verdadero "por qué" es que el IRDT (Hora de verano de Irán) finaliza el 22 de septiembre. Es por eso que la primera fecha (16 de septiembre) en la publicación del OP se muestra como IRDT y la segunda fecha (23 de septiembre) se muestra como IRST. Como IRST (Hora estándar de Irán) es una hora antes que IRDT, la hora que se muestra es 08:52:36 en lugar de 09:52:36.