我刚接触到android系统,在与jodatime的合作中遇到了困难。我在这里遇到了和很多人一样的错误,我已经尝试了所有的建议,但是没有什么对我有用。我试图将用户从日期和时间选择器(例如'dayNow,monthNow‘等)中选择的变量显示到一个名为“timeselected”的组合变量中,并将其设置为textbox,这样我就可以在jodatime中进一步执行计算。
守则如下:
DateTime dateTime = new DateTime(timeselected);
DateTimeFormatter fmt = DateTimeFormat.forPattern("dd MM yyyy" + "\n" + " h:mm a ");
String formattedtime = fmt.print(dateTime);
CalculateButton.setText(formattedtime);
// Plus some hours, minutes, and seconds to the original DateTime.
DateTimeFormatter fmt2 = DateTimeFormat.forPattern("dd MM yyyy" + "\n" + " h:mm a ");
DateTime dateTime1 = dateTime.plusHours(timeadded);
String endtimecalc = fmt2.print(dateTime1);
TextView endtime = (TextView) findViewById(endtimetextView);
endtime.setVisibility(View.VISIBLE);
endtime.setText(endtimecalc);
String timeselected = dayNow + "-" + monthNow + "-" + yearNow + " " + hourNow + ":" + minuteNow;
DateTime datetimselected = DateTime.parse(timeselected);
usertimeselection.setText((CharSequence) datetimselected.toDate());
}
});致命异常:主进程: com.almac.tracker,PID: 29114 java.lang.IllegalArgumentException:无效格式:"2017-11-23 T4:56“在java.lang.IllegalArgumentException的”T4:56“中格式错误:945)在org.joda.time.DateTime.parse(DateTime.java:160) at org.joda.time.DateTime.parse(DateTime.java:149)在com.almac.tracker.CreateLine$5.onClick(CreateLine.java:274) at android.view.View.performClick(View.java:6219)android.view.View$PerformClick.run(View.java:24482) at android.os.Handler.handleCallback(Handler.java:769) at androidandroid.app.ActivityThread.main(ActivityThread.java:6540) .os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164)在com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)的java.lang.reflect.Method.invoke(原生方法)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
发布于 2017-11-07 09:29:00
来自DateTime.parse(String str)文档:
从指定的字符串解析DateTime。 它使用ISODateTimeFormat.dateTimeParser()。
日期时间字符串对ISODateTimeFormat无效,它不接受/,但接受-。
因此,要么将您的/更改为-并遵守规则:date-opt-time = date-element ['T' [time-element] [offset]] (请参阅日期和时间元素之间的'T'!)因此,日期时间字符串应该如下所示:
String timeselected = yearNow + "-" + monthNow + "-" + dayNow + "'T'" + hourNow + ":" + minuteNow;
DateTime datetimselected = DateTime.parse(timeselected);或者通过DateTime.parse(String str, DateTimeFormatter formatter)方法使用您自己的格式化程序。
更新1
在运行一些测试之后,'T'实际上不会被默认的解析器所接受。解析器传递的字符串是:
"2017-11-23T04:56"因此,确保date节、"T"字符和time节之间没有空格。
String timeselected = yearNow + "-" + monthNow + "-" + dayNow + "T" + hourNow + ":" + minuteNow;更新2
为解析器附加测试代码
public class Main {
public static void main(String[] args) {
String timeselected = "2017-11-23T04:56";
DateTime datetimselected = DateTime.parse(timeselected);
System.out.println(datetimselected.toDate());
}
}产出:
Thu Nov 23 04:56:00 EET 2017https://stackoverflow.com/questions/47154122
复制相似问题