使用日历从日期中减去分钟失败

问题描述 投票:0回答:1

我正在编写一个应用程序,必须找到一些闹钟时间(从日期对象),然后减去用户选择的几个小时和分钟(通过使用日历对象)(间隔,所选时间之前的几个小时和分钟)时间)。

我尝试这样做,程序成功减去了小时(IntervalHours,如下),但是当我尝试减去分钟(IntervalMinutes,如下)时 - 程序显示错误的时间。

代码如下:(

this.realAlarmTime
是选择的时间,来自
Date
类型)

            Calendar calendar = Calendar.getInstance();
            calendar.setTime(this.realAlarmTime);
            calendar.add(Calendar.HOUR, -(this.intervalHours));
            calendar.add(Calendar.MINUTE, -(this.intervalMinutes));
            this.realAlarmTime = calendar.getTime();

例如,当程序选择时间“15:47”,间隔为1 MINUTE时,程序显示“16:59”,而减去1 HOUR则显示“14:57”..

这个程序有问题吗,或者函数

calrnder.add
对于这个目标来说不正确?

提前致谢!

我尝试了其他方法,但没有找到解决方案。

java android date calendar
1个回答
0
投票

假设您无法更改输入

Date
,您可以使用当前时间类而不是日历,但建议也摆脱日期。从您的问题看来,您可能遇到与时区处理相关的问题。例如,如果您假设时区是本地时区,但结果采用 UTC 格式,则可能是结果不是您所期望的原因。没有足够的信息来确定。

使用 ZonedDateTime 而不是 Calendar/Date 类来执行类似计算的示例:

public class MyClass {
    public static void main(String args[]) {
        int intervalHours=1;
        int intervalMinutes=1;
        ZonedDateTime dateTime = ZonedDateTime.of(2024, 6, 5, 15, 47, 0, 0, ZoneId.of("UTC+01:00"));
        
        dateTime = dateTime.minusHours(intervalHours);
        dateTime = dateTime.minusMinutes(intervalMinutes);
        System.out.println("Updated date = " + dateTime);
    }
}

输出:

Updated date = 2024-06-05T14:46+01:00[UTC+01:00]
© www.soinside.com 2019 - 2024. All rights reserved.