我正在编写一个应用程序,必须找到一些闹钟时间(从日期对象),然后减去用户选择的几个小时和分钟(通过使用日历对象)(间隔,所选时间之前的几个小时和分钟)时间)。
我尝试这样做,程序成功减去了小时(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
对于这个目标来说不正确?
提前致谢!
我尝试了其他方法,但没有找到解决方案。
假设您无法更改输入
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]