简体   繁体   中英

Time conversion from seconds to date issue

I have the following Long variable holding epoch value in seconds, which I'm trying to convert into a Date .

val seconds = 1341855763000
val date = Date(TimeUnit.SECONDS.toMillis(seconds))

The output is way off than I expected. Where did I go wrong?

Actual: Wed Sep 19 05:26:40 GMT+05:30 44491
Expected: Monday July 9 11:12:43 GMT+05:30 2012

The output is way off than I expected. Where did I go wrong?

Actual: Wed Sep 19 05:26:40 GMT+05:30 44491
Expected: Monday July 9 11:12:43 GMT+05:30 2012

The value is already in milliseconds and by using TimeUnit.SECONDS.toMillis(seconds) you are wrongly multiplying it by 1000 .

By using the modern date-time API :

import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        Instant instant = Instant.ofEpochMilli(1341855763000L);
        System.out.println(instant);
    }
}

Output:

2012-07-09T17:42:43Z

By using legacy java.util.Date :

import java.util.Date;

public class Main {
    public static void main(String[] args) {
        System.out.println(new Date(1341855763000L));
    }
}

Output:

Mon Jul 09 18:42:43 BST 2012

I recommend you switch from the outdated and error-prone java.util date-time API and SimpleDateFormat to the modern java.time date-time API and the corresponding formatting API (package, java.time.format ). Learn more about the modern date-time API from Trail: Date Time .

The value you have is not in seconds but in milliseconds. Remove the "seconds to millis" conversion.

val milliSeconds = 1341855763000
val date = Date(milliSeconds)

Your value : 1341855763000 is not in seconds, it is in milliseconds. The current timestamp is : new Date().getTime() => 1598612990351 Same number of digits than : 1341855763000

If you multiply 1341855763000 by 1000 (as you say), it gives the year : 44491 after JC :D Have a good day

I think your time is actually in milliseconds. If I convert 1341855763000 using this website it gives me your expected time and this as well:

fun main() {
  val millis = 1341855763000
  val date = Date(millis)
  println(date)
}

Alternatively, you can also use seconds:

fun main() {
  val seconds = 1341855763L
  val date = Date(TimeUnit.SECONDS.toMillis(seconds))
  println(date)
}

Just divide by 1000 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM