我正在创建一个应用程序,我需要知道在给定的唤醒时间之前的时间,例如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个小时。 我怎样才能正确计算到第二天起床时间的时间,即使是在午夜?
答案 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);