User7723337
User7723337

Reputation: 12018

Converting milliseconds to Date object

I am having following code to convert milliseconds to Android Date object.

Date dateObj = new Date(milli);  

But problem is that my milliseconds value is having GMT value added in it before i pass it to Date class, add when i print this date object i can see that date object is again adding GMT value in the milliseconds value and because of that my date is displayed as wrong.

So how can i generate Date object with out considering GMT value in it.

For example my milliseconds are 1385569800000 which is getting printed as below:

Wed, 27 Nov 2013 22:00:00  --> +5.30

But the current value of this time stamp without adding GMT is:

Wed, 27 Nov 2013 16:30:00  

*UPDAE*

It is not just about printing the date in right format and with right date time.
But i want to use that date object to schedule TimeTask.
So basically i want to create Date object which has proper date time value in it with out adding extra GMT time added in it.

Upvotes: 1

Views: 7207

Answers (5)

Pete Verdon
Pete Verdon

Reputation: 335

A Date object simply represents a moment in time. Imagine you're on the phone to someone on a different continent, and you say "3...2...1...NOW!". That "NOW" is the same moment for both of you, even though for one person it's 9am and for the other it's 4pm.

You're creating a Date representing the moment 1385569800000 milliseconds after the Java epoch (the beginning of 1970, GMT). That is your "NOW", and it's fixed and unchanging. What it looks like converted into text, however, depends on which timezone you want to display it for. Java defaults to using GMT, which would be right if you were in Britain during the winter, but for (I'm guessing) India you want it in a different time zone. Laalto's answer shows you how to do that.

Upvotes: 1

laalto
laalto

Reputation: 152907

A Date is always in UTC. No need to change that.

When printing the date value, use SimpleDateFormat and call setTimeZone() on it before formatting the output string.

It is not just about printing the date in right format and with right date time. But i want to use that date object to schedule TimeTask.

TimerTask is just a task and not its scheduling. Timer accepts a Date object for scheduling. The Date is in UTC there as well.

Upvotes: 2

Haris
Haris

Reputation: 4230

You can try with joda-time API.

Joda-Time provides a quality replacement for the Java date and time classes. The design allows for multiple calendar systems, while still providing a simple API. The 'default' calendar is the ISO8601 standard which is used by XML. The Gregorian, Julian, Buddhist, Coptic, Ethiopic and Islamic systems are also included, and we welcome further additions. Supporting classes include time zone, duration, format and parsing.

http://joda-time.sourceforge.net/key_instant.html

Upvotes: 1

Imtiyaz Khalani
Imtiyaz Khalani

Reputation: 2053

try my code if you a

long currentTime = System.currentTimeMillis();
TimeZone tz = TimeZone.getDefault();
Calendar cal = GregorianCalendar.getInstance(tz);
int offsetInMillis = tz.getOffset(cal.getTimeInMillis());

currentTime -= offsetInMillis;
Date date = new Date(currentTime);

it is work for me

Upvotes: 1

Hamad
Hamad

Reputation: 5152

here is the code,that worked like charm for me:

public static String getDate(long milliSeconds, String dateFormat)
{
    // Create a DateFormatter object for displaying date in specified format.
    DateFormat formatter = new SimpleDateFormat(dateFormat);

    // Create a calendar object that will convert the date and time value in milliseconds to date. 
     Calendar calendar = Calendar.getInstance();
     calendar.setTimeInMillis(milliSeconds);
     return formatter.format(calendar.getTime());
}

Upvotes: 0

Related Questions