2014-05-23 48 views
1

这是一个非常烦人的问题,我一直面临几天。我正在使用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.MONTH值Calendar.DAY_OF_MONTH,他们错了。小时和分钟值相同(当前时间是17:25,但日历给出11:12)。

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

+0

请问,当你在物理设备上运行相同的发生呢? –

回答

2

Calendar.HOUR_OF_DAY是由Android分配常数。

当你使用它Calendar.HOUR_OF_DAY不给你当前的小时它给你的值的Android分配至恒Calendar.HOUR_OF_DAY

如果你想获得你需要做的

Calendar cal = Calendar.getInstance(); 
当前时间

,然后如果你想获取当前的小时检索它像

cal.get(Calendar.HOUR_OF_DAY); 

这会给你当前的小时相同专家组s为任何其他价值。

说明:当您检索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); 
+0

谢谢:)我已经修复它自己,但不想删除问题,因为它可能对别人有帮助。标记正确。 – Asim

0

尝试此

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; 
     } 
    }); 
+1

你改变了什么?你能解释什么是不同的,为什么?它对初学者更有帮助,如果你对你提出的答案提供某种解释 – CurlyPaul

+0

这是错误的,因为你仍然指的是由'Android'分配的'Constants'没有得到实际值。 – Apoorv

+0

我将Calendar对象更改为Calendar的getInstance方法,该方法返回其语言环境基于系统设置并且其时间字段已用当前日期和时间初始化的日历 –