Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

417
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!