java - 获取两个日历之间的差异

标签 java android

我正在设置闹钟响起的日历日期。闹钟时间设置了小时、分钟、格式和日期。我也想捕获现在的时间,比较一下差异。因此,如果闹钟时间设置在星期三,现在时间是星期四,我想知道星期四到星期三之间有多少天。我还需要几小时和几分钟。

我已经尝试了每个示例,但似乎没有任何效果。

JAVA方法

    private void setAlarm(final int position, int day){

    alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
    int amPm = 0 ;

    String hourOfDay = mDataset.get(position).getHourOfDay();
    String minute = mDataset.get(position).getMinute();

    String format =  mDataset.get(position).getTimeSet();
    if("PM".equalsIgnoreCase(format)){
        amPm = 1;
    }else{
        amPm = 0;
    }

    Calendar alarmTime = Calendar.getInstance();
    alarmTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hourOfDay));
    alarmTime.set(Calendar.MINUTE, Integer.parseInt(minute));
    alarmTime.set(Calendar.AM_PM,amPm);
    alarmTime.set(Calendar.DAY_OF_WEEK, day);


    Calendar now = Calendar.getInstance();

我确实尝试过这个。

 alarmTime = Calendar.getInstance();
    alarmTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hourOfDay));
    alarmTime.set(Calendar.MINUTE, Integer.parseInt(minute));
    alarmTime.set(Calendar.AM_PM,amPm);
    alarmTime.set(Calendar.DAY_OF_WEEK, day);


    Calendar now = Calendar.getInstance();


    long millis1 = now.getTimeInMillis();
    long millis2 = alarmTime.getTimeInMillis();

    long diff = millis1 - millis2;

    long diffSeconds = diff / 1000 % 60;
    long diffMinutes = diff / (60 * 1000) % 60;
    long diffHours = diff / (60 * 60 * 1000) % 24;
    long diffDays = diff / (24 * 60 * 60 * 1000);

这不太正确。它说 2 天,所以我假设闹钟日(星期二)到星期四(今天)。我需要的是从今天(星期四)到星期二。距离现在大约还有 5 天。时间应该在 5 小时左右,但似乎总是 12 小时。

enter image description here

如何获取当前时间与我设置的闹钟时间之间的差异?

最佳答案

我认为您的代码“可能”存在问题的几件事是:

alarmTime.set(Calendar.DAY_OF_WEEK, day);

您是从数据集中获取星期几还是月份?确保它返回星期几或将其更改为 DAY_OF_MONTH。

一旦你这样做了,你就可以做这样的事情

long millis1 = now.getTimeInMillis();
long millis2 = alarmTime.getTimeInMillis();

//Take the absolute difference between the two millis so you don't get a negative valure
long diff = millis1 > millis2 ? (millis1 - millis2) :(millis2 - millis1);
int days = TimeUnit.MILLISECONDS.toDays(diff)
int hours = TimeUnit.MILLISECONDS.toHours(diff)
int minutes = TimeUnit.MILLISECONDS.toMinutes(diff)

这将为您提供任意两次时间之间的差异(以毫秒为单位)。

关于java - 获取两个日历之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47935665/

相关文章:

android - 清除 volley 缓存需要使哪个 url 失效?

java - 由 : java. lang.UnsupportedOperationException: null Lombok with List 引起

java - JPanel 内容 Pane 困惑

java - 32 位 JVM 和 64 位 JVM 之间的 Integer.MAX_VALUE 有区别吗?

android - HTML5 移动游戏的性能问题

php - 将字符串从Android发布到PHP

java - 创建 fragment 会导致应用程序崩溃

android - 为什么 FragmentManager 的 getBackStackEntryCount() 返回零?

java - 算法设计: inserting bags into containers with a limited size

java - 如何获取 "Compute Language Benchmark Game"的 jruby 基准测试和框架