[英]java Calendar get hour before the next day
我有一个日期:21/08/2013 17:05:06我想知道22/08/2013 00:00:00之前的毫秒数
是否可以用Calendar对象做到这一点? 谢谢
编辑:
我的解决方案发现:
Calendar cal2 = Calendar.getInstance(TimeZone.getDefault());
cal2.setTimeInMillis(prevCalBatt.getTimeInMillis());
cal2.add(Calendar.DAY_OF_MONTH,1); //add a day
cal2.set(Calendar.HOUR_OF_DAY, 0); //set time to midnight
cal2.set(Calendar.MINUTE, 0);
cal2.set(Calendar.SECOND, 0);
cal2.set(Calendar.MILLISECOND, 0);
timeBetweenBoth+=(cal2.getTimeInMillis()-prevCalBatt.getTimeInMillis());
为每个日期创建一个日历对象,然后减去其getTimeInMillis()
。
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(sdf.parse("22/08/2013 00:00:00"));
long millis = cal.getTimeInMillis();
cal.setTime(sdf.parse("21/08/2013 17:05:06"));
millis -= cal.getTimeInMillis();
您可以使用以下方法设置警报:
/**
* Set the Alarm
*
* @param context the activity context
* @param id the alarm ID for this app
* @param hour the alarm hour
* @param minute the alarm minute
* @param timeZone the timezone "am" = Calendar.AM or "pm" = Calendar.PM
*/
public static void setAlarm(Context context, int id, int hour, int minute, String timeZone) {
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
AlarmStateCache cache = AlarmStateCache.getInstance(context);
cache.saveState(State.ON);
Calendar now = Calendar.getInstance();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, to24Hour(hour, timeZone));
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
if(calendar.before(now))
calendar.add(Calendar.DAY_OF_MONTH,1);
Intent intent = new Intent(context, YourReceiver.class);
PendingIntent pIntent = PendingIntent.getBroadcast(context, id, intent, 0);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 20, pIntent);
}
和助手方法
public static int to24Hour(int hour, String zone) {
if (1 > hour && hour < 12)
throw new IllegalArgumentException("Hour must only be 1 - 12!");
return zone.equals("am") ? hour : hour + 12;
}
在setAlarm
方法中,如果当前时间已经过去,我们可以看到添加了1天,因此我们可以确保时间将在第二天左右提示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.