获得时间,直到给出日历唤醒时间

时间:2014-08-10 18:42:59

标签: android android-calendar

我正在创建一个应用程序,我需要知道在给定的唤醒时间之前的时间,例如8:30,所以我有时候会使用这段代码

String hours = separated[0]; // 8
String minutes = separated[1]; // 30
c.add(Calendar.DAY_OF_MONTH, 1);
c.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hours));
c.set(Calendar.MINUTE, Integer.parseInt(minutes));
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long timeUntilStageTwo = (c.getTimeInMillis() - System.currentTimeMillis());

问题是,如果时间是午夜1点,它仍然会在日历中累计1天,然后它会计算到第二天的时间,这将是30个小时。 我怎样才能正确计算到第二天起床时间的时间,即使是在午夜?

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。

如果您超过原始时间,则一种方法是仅添加1天:

String hours = separated[0]; // 8
String minutes = separated[1]; // 30
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hours));
c.set(Calendar.MINUTE, Integer.parseInt(minutes));
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);

if(c.before(Calendar.getInstance()) {
    c.add(Calendar.DAY_OF_MONTH, 1);
}

long timeUntilStageTwo = (c.getTimeInMillis() - System.currentTimeMillis());

另一种简单的方法是将代码保留原样,然后获取最终值并从中减去整天:

long timeUntilStageTwo = (c.getTimeInMillis() - System.currentTimeMillis()) % (24*60*60*1000);