【问题标题】:Calendar giving wrong date and time日历给出错误的日期和时间
【发布时间】:2014-05-23 12:25:46
【问题描述】:

这是我这几天一直面临的一个非常烦人的问题。我正在使用 Genymotion 模拟器。代码如下:

        DatePicker dp = (DatePicker) d.findViewById(R.id.datePicker1);
        TimePicker tp = (TimePicker) d.findViewById(R.id.timePicker1);

        Calendar.getInstance();

        selectedDate = Calendar.YEAR + "/" + Calendar.MONTH + "/" + Calendar.DAY_OF_MONTH;
        selectedTime = Calendar.HOUR_OF_DAY + ":" + Calendar.MINUTE;

        dp.init(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, new OnDateChangedListener()
        {
            @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
            {
                selectedDate = dayOfMonth + "/" + monthOfYear + 1 + "/" + year;
            }
        });

当我调试上述代码并观察 Calendar.MONTHCalendar.DAY_OF_MONTH 的值时,它们是错误的。小时和分钟值也是如此(当前时间是 17:25,但日历给出 11:12)。

我做错了什么? TimerPicker 在同一设备上自动初始化为正确的时间。

【问题讨论】:

  • 在物理设备上运行会不会出现同样的情况?

标签: android android-calendar android-datepicker


【解决方案1】:

Calendar.HOUR_OF_DAY 是 Android 分配的常量。

当您使用 Calendar.HOUR_OF_DAY 时,它不会为您提供当前时间,而是为您提供 Android 分配给常量 Calendar.HOUR_OF_DAY 的值

如果你想得到你需要做的当前时间

Calendar cal = Calendar.getInstance();

然后,如果您想检索当前小时,请像这样检索它

cal.get(Calendar.HOUR_OF_DAY);

这将为您提供当前小时,对于任何其他值也是如此。

注意:当您检索 MONTH 时,它会给您少 1 个值例如。 5 月将返回 4,因为它基于 0 索引值。

所以为了得到今天的日期和时间,你必须这样做

selectedDate = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH)+1) + "/" + cal.get(Calendar.DAY_OF_MONTH);
selectedTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE);

【讨论】:

  • 谢谢 :) 我自己修复了它,但不想删除这个问题,因为它可能对其他人有帮助。标记为正确。
【解决方案2】:

试试这个

 Calendar cal = Calendar.getInstance();

    selectedDate = cal.YEAR + "/" + cal .MONTH + "/" + cal.DAY_OF_MONTH;
    selectedTime = cal.HOUR_OF_DAY + ":" + cal.MINUTE;

    dp.init(cal.YEAR, cal.MONTH, cal.DAY_OF_MONTH, new OnDateChangedListener()
    {
        @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
        {
            selectedDate = dayOfMonth + "/" + monthOfYear + 1 + "/" + year;
        }
    });

【讨论】:

  • 你到底做了什么改变?你能解释一下有什么不同吗?为什么?如果您对建议的答案提供某种解释,对初学者更有帮助
  • 这是错误的,因为您仍然引用由Android 分配的Constants 没有得到实际值。
  • 我将 Calendar 对象更改为 Calendar 的 getInstance 方法,该方法返回一个日历,其区域设置基于系统设置,并且其时间字段已使用当前日期和时间进行初始化
  • 你试过运行它吗?因为我很确定它不会返回正确的时间。即使您创建了Calendar 的对象,HOUR_OF_DAY 仍然引用相同的值,因为它是static int。你可以在这里查看HOUR_OF_DAY
猜你喜欢
  • 2019-05-12
  • 1970-01-01
  • 2014-11-15
  • 2019-09-25
  • 2013-01-20
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2021-01-10
相关资源
最近更新 更多