2011-03-02 98 views
4

我已閱讀所有的文檔,似乎沒有太多的真正解釋日期功能,或缺乏那裏。作爲一個時間的Android毫秒

我正在嘗試實現AlarmManger,它需要以毫秒(ms)爲單位的觸發器時間。爲了測試我花了現在的時間,並增加了5秒,那很好。

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

如果我有一個日期和時間,我將如何獲得當時的ms。

像「2011/3/2 8點15分00秒」

我如何把它轉換成毫秒?

回答

13

使用此方法。

例如:

方法調用2011/3/2八點15分00秒

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

方法

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(); 
} 
+0

不錯的解決方案.. – 2016-04-05 12:10:22

3

當使用AlarmManager你必須設置鬧鐘兩種選擇 - 第一個是從設備重啓後的毫秒時間(不瞭解該選項),或者,如果你想要一個'絕對'時間,那麼你需要提供一個UTC時間(毫秒)。

我認爲這應該工作 - 我已經做了,在過去類似的東西...

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; 
} 

個人而言,我建議你嘗試使用非本地化的格式,如yyyy-MM-dd HH:mm:ss任何日期/時間如果您想要迎合全球用戶,請使用字符串。

ISO 8601國際標準是yyyy-MM-dd HH:mm:ss.SSSZ但我通常不會那麼遠。