Android中的时间戳是什么?

4

我已阅读所有文档,似乎并没有太多关于日期函数的解释,或者说缺乏解释。

我正在尝试实现AlarmManager,需要以毫秒为单位的时间(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);

如果我有一个日期和时间,如何得到该时间的毫秒数。

比如 "2011年3月2日 08:15:00"

我应该如何将其转换为毫秒数?

2个回答

14

使用这个方法。

示例:

调用方法,日期为3/2/2011 08: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();  
} 

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,但我通常不会那么做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接