Java 设置时间选择器日期

Java 设置时间选择器日期,java,android,Java,Android,编辑: 尝试在日历对象上设置小时和分钟值时出错 我正在尝试在我的应用程序上设置时间选择器的时间和分钟值 我将时间值作为字符串存储在数据库中。我已经将这个值解析为一个日期对象,现在我不确定如何获得小时和分钟值来设置选择器本身 也就是说,如果时间存储在晚上8:30,我想通过类的onCreate方法在时间选择器上设置它 以下是我目前的代码: DateFormat newFormat = new SimpleDateFormat("hh:mm"); try { da

编辑:

尝试在日历对象上设置小时和分钟值时出错

我正在尝试在我的应用程序上设置时间选择器的时间和分钟值

我将时间值作为字符串存储在数据库中。我已经将这个值解析为一个日期对象,现在我不确定如何获得小时和分钟值来设置选择器本身

也就是说,如果时间存储在晚上8:30,我想通过类的onCreate方法在时间选择器上设置它

以下是我目前的代码:

     DateFormat newFormat = new SimpleDateFormat("hh:mm");
     try 
    {
    dateToEdit = newFormat.parse(returnedTime);
    } catch (ParseException e)
    {

        e.printStackTrace();
    }     


     Calendar cal = Calendar.getInstance();
     cal.setTime(dateToEdit);
     editTimePicker.setCurrentHour(Calendar.HOUR_OF_DAY);
     editTimePicker.setCurrentMinute(Calendar.MINUTE);
日志cat显示错误

01-29 21:58:47.860: D/AndroidRuntime(269): Shutting down VM
01-29 21:58:47.870: W/dalvikvm(269): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-29 21:58:47.890: E/AndroidRuntime(269): FATAL EXCEPTION: main
01-29 21:58:47.890: E/AndroidRuntime(269): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.flybase2/com.example.flybase2.AppointmentEditChanges}: java.lang.NullPointerException
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.os.Looper.loop(Looper.java:123)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread.main(ActivityThread.java:4627)
01-29 21:58:47.890: E/AndroidRuntime(269):  at java.lang.reflect.Method.invokeNative(Native Method)
01-29 21:58:47.890: E/AndroidRuntime(269):  at java.lang.reflect.Method.invoke(Method.java:521)
01-29 21:58:47.890: E/AndroidRuntime(269):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-29 21:58:47.890: E/AndroidRuntime(269):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-29 21:58:47.890: E/AndroidRuntime(269):  at dalvik.system.NativeStart.main(Native Method)
01-29 21:58:47.890: E/AndroidRuntime(269): Caused by: java.lang.NullPointerException
01-29 21:58:47.890: E/AndroidRuntime(269):  at com.example.flybase2.AppointmentEditChanges.onCreate(AppointmentEditChanges.java:100)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

您可以使用
日历
获取日期对象之外的时间:

Calendar cal = Calendar.getInstance();
cal.setTime( dateToEdit );
timePicker.setCurrentHour( cal.get( HOUR_OF_DAY ) );
timePicker.setCurrentMinute( cal.get( MINUTE ) );
在执行上述操作之前,您必须创建
timePicker
,或者

timePicker = (TimePicker)findViewById( R.id.my_time_picker );


在第二种情况下,您必须以某种方式将其添加到布局中。

不要将日期和时间作为字符串存储在数据库中(不要忘记时区,…)

相反,在GMT时区(
long
value)中存储自历元以来的毫秒数

通过
Date.getTime()

然后,您可以再次使用它来构建日期或日历:

Calendar cal = new GregorianCalendar(myTimeZone);
cal.setTimeInMillis(myDbTime);

我还强烈建议您不要使用
java.util.Date
和其他
java.util.Calendar
,而是使用。

现有代码会发生什么?@Aaron Kurtzhals目前什么都没有。我希望有人能把我推向正确的方向,告诉我如何从“dateToEdit”对象中提取小时和分钟值,并用这些值设置时间选择器。它不是应该是
Calendar.hour\u OF_DAY
Calendar.minute
?@Ralgha非常感谢你的回答。我已经尝试了代码并将其设置为我的导入,但是现在我在创建日历对象实例时遇到了错误。我已将LogCat添加到我原来的帖子中。我似乎收到了一个“不可解析的日期”错误。还要添加。我修复了解析错误,因为我将日期布局设置为“hh:mm”。现在我仍然在实际的小时和分钟设置上有错误。@Ralgha很抱歉,我忘了补充我用我的代码做的。当我真的试图设置时间选择器的小时和分钟时,我仍然会崩溃。我已经在上面添加了我的完整代码。非常感谢您的时间。@Ralgha再次感谢您的回复。我已经尝试了这两种方法,但在运行代码时仍然出现空指针异常。
Calendar cal = new GregorianCalendar(myTimeZone);
cal.setTimeInMillis(myDbTime);