我是安卓系统的新手,在使用jodatime时遇到了问题。我和这里的许多人都遇到了同样的错误,我尝试了所有的建议,但都不起作用。我试图将用户从日期和时间选择器中选择的变量(如"dayNow,monthNow"等)显示为一个名为"timeselected"的组合变量,并将其设置为文本框,这样我就可以在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());
}
});
致命异常:main进程:com.almac.tracker,PID:29114java.lang.IllegalArgumentException:无效格式:"2017-11-23 T 4:56"在"T 4:56处格式不正确网址:org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatt.java:945)网址:org.joda.time.DateTime.parse(DateTime.java:160)网址:org.joda.time.DateTime.parse(DateTime.java:149)网址:com.almac.tracker.CreateLine$5.onClick(CreateLine.java:274)在android.view.view.performClick(view.java:6219)在android.view.view$PerformClick.run(view.java:24482)在android.os.Handler.handleCallback(Handler.java:769)在android.os.Handler.dispatchMessage上(Handler.java:98)在android.os.Looper.loop(Looper.java:164)位于android.app.ActivityThread.main(ActivityThreads.java:6540)位于java.lang.reflect.Method.ioke(本机方法)网址:com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:767)
来自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"
因此,请确保日期部分、"T">字符和时间部分 更新2 附加我的解析器测试代码 输出:String timeselected = yearNow + "-" + monthNow + "-" + dayNow + "T" + hourNow + ":" + minuteNow;
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 2017