Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

432
Vistas
convert exp date JWT token in java not work like in js, why?

I'm trying to get value of the exp datetime in a JWT token. exp is the expiration time after which JWT must not be accepted.

In JavaScript I get the correct result by

new Date(1661159784*1000) 

the correct result is

Mon Aug 22 2022 11:16:24 GMT+0200 (CEST)

Why didn't I get the same in Java?

Java:

System.out.println(new Date(1661159784 * 1000)); 

result:

Sat Dec 20 13:17:20 CET 1969

The same result setting s UTC time zone:

final ZonedDateTime exp2 = Instant.ofEpochMilli(1661159784 * 1000)
                                  .atZone(ZoneOffset.UTC);
System.out.println(exp2);

result:

1969-12-20T12:17:20.448Z
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

The constructor of Date you used takes a long argument, but what you passed is in fact an (overflown) int:

public static void main(String[] args) {
    int overflowedInt = 1661159784 * 1000;
    System.out.println(overflowedInt);
}

Output: -992559552

The same applies to Instant.ofEpochMilli(long)…


You can get the desired result if you use Instant.ofEpochSecond(long) without multiplying by 1000:

public static void main(String[] args) {
    Instant instant = Instant.ofEpochSecond(1661159784L);
    ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.of("UTC"));
    System.out.println(zdt);
}

Output:

2022-08-22T09:16:24Z[UTC]

If you have to use a java.util.Date, which is not recommended anymore, either do the calculation with longs:

System.out.println(new Date(1661159784L * 1000L));

or — much better — use the compatibility method Date.from(Instant) and create the Instant as shown at the top of this answer, that is Instant.ofEpochSecond(long):

System.out.println(Date.from(Instant.ofEpochSecond(1661159784L)));

Output:

Mon Aug 22 11:16:24 CEST 2022

… in my TimeZone/ZoneId ("Europe/Berlin"), pay attention to the zones here.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda