101

I can convert a unix timestamp to a Date() object by putting the long value into the Date() constructor. For eg: I could have it as new Date(1318762128031).

But after that, how can I get back the unix timestamp from the Date() object?

3
  • you can still get the long value of your Date object, can't u? Commented Oct 16, 2011 at 13:03
  • @xEnOn: you're not converting a Unix timestamp into a date by using the long constructor. A Unix timestamp, as I commented on jackrabbit's answer, is expressed in seconds, not milliseconds. Here: en.wikipedia.org/wiki/Unix_time and here: unixtimestamp.com/index.php Seconds. Not milliseconds. Commented Oct 16, 2011 at 15:06
  • possible duplicate of Getting "unixtime" in Java Commented Nov 16, 2012 at 0:47

7 Answers 7

105

getTime() retrieves the milliseconds since Jan 1, 1970 GMT passed to the constructor. It should not be too hard to get the Unix time (same, but in seconds) from that.

Sign up to request clarification or add additional context in comments.

4 Comments

Thanks. I kept remembering it wrongly as a static function Date.getTime(new Date()) which didn't work and thought what was going on.
@jackrabbit: actually getTime() doesn't give back the Unix timestamp but "Unix timestamp * 1000". The agreed defintion about the Unix timestamp is that it gives times since the epoch in second, not milliseconds ; )
@TacticalCoder jackrabbit is more accurate: It returns the unix-timestamp in milliseconds. Yes, the unix-timestamp is agreed to be in seconds - but if your answer would be true, (getTime() = unixTimestamp * 1000), getTime() would always return three Zeros at the end, but in fact can return anything from ending with 000 to 999, which means it has a higher precision due to milliseconds and is not just "*1000". Meaning: Comparing a real unixTimestamp*1000 with the getTime() result would only succeed in ~0.1% of the cases.
For the record, the function returns the miliseconds in GMT-0 area (in Greenwich), So you can be safe about converting this to different areas.
56

To get a timestamp from Date(), you'll need to divide getTime() by 1000, i.e. :

Date currentDate = new Date();
currentDate.getTime() / 1000;
// 1397132691

or simply:

long unixTime = System.currentTimeMillis() / 1000L;

1 Comment

Or more tersely: new Date().getTime()
26
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

public class Timeconversion {
    private DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH); //Specify your locale

    public long timeConversion(String time) {
        long unixTime = 0;
        dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+5:30")); //Specify your timezone
        try {
            unixTime = dateFormat.parse(time).getTime();
            unixTime = unixTime / 1000;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return unixTime;
    }
}

Comments

8

In java 8, it's convenient to use the new date lib and getEpochSecond method to get the timestamp (it's in second)

Instant.now().getEpochSecond();

2 Comments

But the code presented returns the # of seconds for this moment
True, @MilanVelebit. You will have to substitute your desired Instant instead of Instant.now(). Or yourDesiredJavaUtilDate.toInstant() if you got an old-fashioned Date from a legacy API.
2

tl;dr

java.time.Instant
.ofEpochMilli( 1_318_762_128_031L )  // From count to moment.
.toEpochMilli()                      // From moment to count.

1318762128031

Modern Java

In Java 8+, use the java.time classes.

Never use the terribly flawed legacy classes, such as Date, Calendar, SimpleDateFormat, Timestamp, etc.

From count to moment

You apparently have a count of milliseconds since the epoch reference of the first moment of 1970 in UTC, 1970-01-01T00:00Z.

I could have it as new Date(1318762128031)

Instant instant = Instant.ofEpochMilli( 1_318_762_128_031L ) ;

Generate text in standard ISO 8601 format.

String output = instant.toString() ;

Run this code at Ideone.com.

2011-10-16T10:48:48.031Z

From moment to count

You said:

how can I get back the unix timestamp from the Date() object?

Interrogate the Instant object.

long count = instant.toEpochMilli() ;

We get the same long number as where we started.

1318762128031

Comments

0

I dont know if you want to achieve that in js or java, in js the simplest way to get the unix timestampt (this is time in seconds from 1/1/1970) it's as follows:

var myDate = new Date();
console.log(+myDate); // +myDateObject give you the unix from that date

Comments

-2

Use SimpleDateFormat class. Take a look on its javadoc: it explains how to use format switches.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.