处理时钟变化时保存的纪元时间

时间:2013-06-12 22:22:24

标签: java android alarm epoch

我有一个使用以下两种方法的闹钟应用程序:

private void fastForwardAlarmToNext24Hours() { 
// Get Alarm Time (unix)
    DataStorageController alarmTimeController = new DataStorageController(getApplicationContext());
    epochAlarmTime = alarmTimeController.getAlarmTime();

    // Get Current Time (unix)
    long epochCurrentTime = System.currentTimeMillis() / 1000L;

    // While Alarm Time in the past, fast forward another 24 hours
    while (epochAlarmTime < epochCurrentTime) {
        epochAlarmTime = epochAlarmTime + (24*60*60); // Add a days worth of seconds
    }
}

private Long getNumberOfSecondsUntilAlarm() {
    long epochCurrentTime = System.currentTimeMillis() / 1000L;
    return epochAlarmTime - epochCurrentTime;
}

这很好用,我得到了这些结果:

SUMMER

10-12 07:46:26.678:D / CJS Logging(776):epochCurrentTime:1381560386 10/12/2013 7:46:26 AM +1 10-12 07:46:26.678:D / CJS记录(776):epochAlarmTime:1381560480 10/12/2013 7:48:00 AM +1

但是,当我将设备的日期时间转发到冬天(发布时钟更改)时,我得到以下结果,并且闹钟会关闭1小时:

WINTER

11-12 07:47:10.441:D / CJS Logging(942):epochCurrentTime:1384242430 11/12/2013 7:47:10 AM +0 11-12 07:47:10.441:D / CJS记录(942):epochAlarmTime:1384325280 11/13/2013 6:48:00 AM +0

发生这种情况的原因是因为保存的闹钟时间保持相同的纪元时间,但是当时钟发生变化时,本地时间会移动1小时。

有没有人对如何处理此事有任何建议?

干杯,查理

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

使用Calendar实例,您可能希望使用本地时间而不是使用UNIX时间:

// Get Current Time 
Calendar currentTime = GregorianCalendar.getInstance();

// While Alarm Time in the past, fast forward a day
while (alarmTime.before(currentTime)) {
    alarmTime.add(Calendar.DAY_OF_YEAR, 1);
}

答案 2 :(得分:0)

System.currentTimeMillis()返回的long值始终是1970年1月1日UTC之后的秒数。

根据您初始化时间戳的方式,可以显示不同的值(基于您的区域设置/机器/时间等)。

为了保持一致,请使用GMT(或没有夏令时的时区)在内部处理您的时间。