首页 > 解决方案 > Calendar.set(field,value) 没有正确设置小时

问题描述

我在 Android 应用程序中使用 2 个不同的对话框选取器,1 个用于日期,一个用于小时。一旦用户确认在对话框中选择的值,我使用它们来Calendar cal使用函数 更新变量cal.set()。但是当我尝试在使用cal.getTime()输出设置它之后获取时间时并不一致。即,如果我从选择器中选择 6:00 并更新我的 cal,有时小时输出是 18:00,有时是 6:00。我完全不明白的另一件奇怪的事情是,即使我不更改实际的 DAY 字段,在 6 AM(6) 和 6 PM (18) 之间交换有时也会增加 DAY 计数。测试我发现 timePicker 的值正是我点击它们的值。这cal变量是私有的,它在与闲置代码相同的活动类中声明。根据打开应用程序的意图,日历以 2 种不同方式实例化,在一种情况下,我获取当前时间,cal = Calendar.getInstance(); 否则在我设置使用 getInstance() 之后cal.setTime(date);

 timeSetListener = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker timePicker, int inputHH, int inputMM) {

            Log.d("Output picker hour ",String.valueOf(inputHH));
            Log.d("Output picker minutes ",String.valueOf(inputMM));
            cal.set(Calendar.MINUTE, inputMM);
            cal.set(Calendar.HOUR, inputHH);
            Log.d("calendar hour", cal.getTime().toString());
            timeView.setText(hourFormat.format(cal.getTime()));

        }

这是我在测试期间的控制台输出

D/Output picker hour: 6
D/Output picker minutes: 0
D/calendar hour: Sun Jun 07 18:00:50 GMT+02:00 2020
D/OpenGLRenderer: endAllActiveAnimators on 0x72f466c900 (RippleDrawable) with handle 0x730f4f84e0
D/Output picker hour: 18
D/Output picker minutes: 0
D/calendar hour: Mon Jun 08 06:00:50 GMT+02:00 2020
D/OpenGLRenderer: endAllActiveAnimators on 0x72f5734100 (RippleDrawable) with handle 0x72f4ee58e0
D/Output picker hour: 6
D/Output picker minutes: 0
D/calendar hour: Mon Jun 08 06:00:50 GMT+02:00 2020
D/OpenGLRenderer: endAllActiveAnimators on 0x72f5537a00 (RippleDrawable) with handle 0x72f47bc4a0
D/Output picker hour: 6
D/Output picker minutes: 0
D/calendar hour: Mon Jun 08 06:00:50 GMT+02:00 2020
D/OpenGLRenderer: endAllActiveAnimators on 0x72f5596100 (RippleDrawable) with handle 0x72f5fec360
D/Output picker hour: 18
D/Output picker minutes: 0
D/calendar hour: Mon Jun 08 18:00:50 GMT+02:00 2020
D/OpenGLRenderer: endAllActiveAnimators on 0x72f4248400 (RippleDrawable) with handle 0x72f467afa0
D/Output picker hour: 18
D/Output picker minutes: 0
D/calendar hour: Tue Jun 09 06:00:50 GMT+02:00 2020
D/OpenGLRenderer: endAllActiveAnimators on 0x72f42f4700 (RippleDrawable) with handle 0x72f56b33c0

标签: androidandroid-studioandroid-calendar

解决方案


利用

cal.set(Calendar.HOUR_OF_DAY, inputHH);

反而

cal.set(Calendar.HOUR, inputHH);


推荐阅读