28

When trying to convert a Unix timstamp, from a database, to a String in a date format.

int _startTS = evtResult.getInt("start"); //outputs 1345867200
Long _sLong = new Long(_startTS); //outputs 1345867200
//I've also tried: Long _sLong = new Long(_startTS*1000); //outputs 1542436352
DateTime _startDate = new DateTime(_sLong); //outputs 1970-01-16T08:51:07.200-05:00

The timestamp is for: Sat, 25 Aug 2012. I have no idea why 1970 is always the output so hopefully someone can see a stupid mistake I'm making.

Strelok
  • 50,229
  • 9
  • 102
  • 115
locrizak
  • 12,192
  • 12
  • 60
  • 80

3 Answers3

63

Unix time is in seconds, Java time is milliseconds

You'll need to multiple it by 1000

DateTime _startDate = new DateTime(_sLong * 1000L);

You may want to check this answer out

Community
  • 1
  • 1
MadProgrammer
  • 343,457
  • 22
  • 230
  • 366
5

Unix time stamp is a number of SECONDS since 1970-01-01 00:00:00.

DateTime(long instant) constructor needs number of MILLISECONDS.

long _startTS = ((long) evtResult.getInt( "start" )) * 1000;
DateTime _startDate = new DateTime( _startTS );

EDIT: or use getLong(..) method on your evtResult to avoid the cast to long.

Strelok
  • 50,229
  • 9
  • 102
  • 115
  • 1
    I know that.. I tried to multiply by 1000 but the timestamp ending up actually being 2018. I needed the `* 1000l` and everythign works great. – locrizak Aug 20 '12 at 15:13
3

When you do this: _startTS*1000, Java assumes you want an int because _startTS is an int (that's why the value is 1542436352). Try casting it as a long first:

Long _sLong = new Long(((long)_startTS)*1000);
Jon Lin
  • 142,182
  • 29
  • 220
  • 220