Joda时间格式无效

时间:2013-03-18 09:06:17

标签: android jodatime

当我尝试使用Joda时间执行此代码时出现错误:

// yyyy-mm-dd, also tried 17-Feb-2013
String input = "2013-02-17";

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy");
DateTime dt = formatter.parseDateTime(input);

TextView tv = (TextView) findViewById(R.id.tvShow);
tv.setText("HERE >>> " + dt.toString());

任何想法?

logcat说:

03-18 16:58:14.919: W/System.err(8259): java.lang.IllegalArgumentException: Invalid format: "2013-02-17" is malformed at "13-02-17"
03-18 16:58:14.919: W/System.err(8259):     at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:871)
03-18 16:58:14.919: W/System.err(8259):     at com.example.dateformatter.MainActivity.onCreate(MainActivity.java:42)
03-18 16:58:14.919: W/System.err(8259):     at android.app.Activity.performCreate(Activity.java:5163)
03-18 16:58:14.919: W/System.err(8259):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
03-18 16:58:14.919: W/System.err(8259):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061)
03-18 16:58:14.919: W/System.err(8259):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122)
03-18 16:58:14.919: W/System.err(8259):     at android.app.ActivityThread.access$600(ActivityThread.java:140)
03-18 16:58:14.919: W/System.err(8259):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228)
03-18 16:58:14.927: W/System.err(8259):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-18 16:58:14.927: W/System.err(8259):     at android.os.Looper.loop(Looper.java:137)
03-18 16:58:14.927: W/System.err(8259):     at android.app.ActivityThread.main(ActivityThread.java:4895)
03-18 16:58:14.927: W/System.err(8259):     at java.lang.reflect.Method.invokeNative(Native Method)
03-18 16:58:14.927: W/System.err(8259):     at java.lang.reflect.Method.invoke(Method.java:511)
03-18 16:58:14.927: W/System.err(8259):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
03-18 16:58:14.927: W/System.err(8259):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
03-18 16:58:14.927: W/System.err(8259):     at dalvik.system.NativeStart.main(Native Method)
03-18 16:58:14.950: D/KeyguardViewMediator(357): setHidden false

3 个答案:

答案 0 :(得分:7)

您已经要求解析“2013-02-17”,好像它的格式为“dd / MM / yyyy”,但显然不是。

您需要指定yyyy-MM-dd作为模式:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");

或者,如果您需要dd/MM/yyyy作为模式,则需要提供该表单的文本,例如

String input = "17/02/2013";

无论哪种方式,您提供的数据都必须与您指定的格式相匹配。毕竟,这是指定格式的重点。

请参阅DateTimeFormat的文档,了解格式模式中的各种字母的含义。

答案 1 :(得分:0)

尝试使用此代码,输入错误的日期格式。

String input = "17/02/2013";

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy");
DateTime dt = formatter.parseDateTime(input);

答案 2 :(得分:0)

您不应该以格式

制造混淆

选项1

String input =“2013-02-17”;

DateTimeFormatter formatter = DateTimeFormat.forPattern(“yyyy-MM-dd”); DateTime dt = formatter.parseDateTime(input);

TextView tv =(TextView)findViewById(R.id.tvShow); tv.setText(“HERE>>>”+ dt.toString());

选项2

String input =“17/02/2013”;

DateTimeFormatter formatter = DateTimeFormat.forPattern(“dd/MM/yyyy”); DateTime dt = formatter.parseDateTime(input);

TextView tv =(TextView)findViewById(R.id.tvShow); tv.setText(“HERE>>>”+ dt.toString());