我已经阅读了所有的文档,并没有太多的东西来真正解释日期函数,或者缺少日期函数。
我正在尝试实现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。
喜欢“3/2/2011 08:15:00”
如何将其转换为毫秒?
答案 0 :(得分:13)
使用此方法。
示例:
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();
}
答案 1 :(得分: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
,但我通常不会那么远。