Mark Worsnop
Mark Worsnop

Reputation: 4467

Android Milliseconds as of a time

I have read all of the docs and there doesnt seem to be too much to really explains the date functions, or the lack there of.

I am trying implement the AlarmManger which needs the time in milliseconds (ms) for the trigger. To test I took the current time and added 5 seconds and that was good.

// get a Calendar object with current time
 Calendar cal = Calendar.getInstance();
 // add 5 minutes to the calendar object
 cal.add(Calendar.SECOND, 5);

If I have a date and time how would I get the ms for that time.

Like "3/2/2011 08:15:00"

How do I turn that into milliseconds?

Upvotes: 4

Views: 12535

Answers (2)

Squonk
Squonk

Reputation: 48871

When using AlarmManager you have two choices in setting an alarm - the first is time in ms since device reboot (don't understand that option) or, if you want an 'absolute' time, then you need to provide a UTC time in ms.

I think this should work - I've done something similar in the past...

public long getUtcTimeInMillis(String datetime) {
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    Date date = sdf.parse(datetime);

    // getInstance() provides TZ info which can be used to adjust to UTC
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);

    // Get timezone offset then use it to adjust the return value
    int offset = cal.getTimeZone().getOffset(cal.getTimeInMillis());
    return cal.getTimeInMillis() + offset;
}

Personally I'd recommend trying to use a non-localised format such as yyyy-MM-dd HH:mm:ss for any date/time string you use if you want to cater for users globally.

The ISO 8601 international standard is yyyy-MM-dd HH:mm:ss.SSSZ but I don't normally go that far.

Upvotes: 3

Phobos
Phobos

Reputation: 9557

Use this method.

example:

method call for 3/2/2011 08:15:00

D2MS( 3, 2, 2011, 8, 15, 0);

method

public long D2MS(int month, int day, int year, int hour, int minute, int seconds) { 
    Calendar c = Calendar.getInstance();
    c.set(year, month, day, hour, minute, seconds);

    return c.getTimeInMillis();  
} 

Upvotes: 14

Related Questions