android - 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
解决方案
利用
cal.set(Calendar.HOUR_OF_DAY, inputHH);
反而
cal.set(Calendar.HOUR, inputHH);
推荐阅读
- javascript - 反应滚动到一个没有反应路由器和最基本代码的组件
- javascript - 当我尝试在我的 chrome 扩展中使用 https://apis.google.com/js/api.js 时出错
- java - 包名无效
- android - 如何使用 OpenGL ES 着色器转换 rgbaToYuv 然后渲染到 ImageReader 的表面
- c++ - 我们可以将 c++ 标准编译与 MSVC 混合使用吗?
- python - python - 如何在python中的空位置将字符串拆分为长度相等的0对?
- javascript - 如果使用量角器不存在元素,如何使测试失败
- c# - 如何在 C# 中逐行读取 CMD 输出结果
- java - Webflux Stream Large List 并使用另一个 springboot 应用程序使用它
- javascript - ActiveCampaign:获取表单提交的页面 URL