2014-02-08 3 views
0

В моем приложении я использовал Custom Calender View и Calender Adapter, и я получаю дату от Custom CalendarView.java в формате yyyy-MM-dd через Intent и его все работает отлично. Но когда я пытаюсь преобразовать его в формат dd-MM-yyyy, приложение становится разбитым.Получение исключения при преобразовании формата даты

// Call Back method to get the Message form other Activity 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    // check if the request code is same as what is passed here it is 
    // ACTIVITY_REQUESTCODE_CALANDER 
    if (requestCode == 1) { 
     if (null != data) { 
      // fetch the message String 
      String selectedDate = data.getStringExtra("SELECTEDDATE"); 

      DateFormat formatter = new SimpleDateFormat("YYYY-MM-DD"); 
      try { 
       Date date = (Date) formatter.parse(selectedDate); 
       SimpleDateFormat newFormat = new SimpleDateFormat(
         "MM-dd-yyyy"); 
       // Or SimpleDateFormat newFormat = new 
       // SimpleDateFormat("dd-MM-yyyy"); 
       String finalString = newFormat.format(date); 
       Toast.makeText(MainActivity.this, finalString, 
         Toast.LENGTH_LONG).show(); 
      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      // Set the message string in textView 
      editTextSelectDate.setText(selectedDate); 
     } 
    } 
} 

Это мой LogCat,

02-08 15:36:12.249: E/AndroidRuntime(4848): FATAL EXCEPTION: main 
02-08 15:36:12.249: E/AndroidRuntime(4848): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=1, data=Intent { (has extras) }} to activity {com.example.calendardemo/com.example.calendardemo.MainActivity}: java.lang.IllegalArgumentException: Unknown pattern character 'Y' 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3209) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3252) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at android.app.ActivityThread.access$1200(ActivityThread.java:143) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at android.os.Looper.loop(Looper.java:137) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at android.app.ActivityThread.main(ActivityThread.java:4963) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at dalvik.system.NativeStart.main(Native Method) 
02-08 15:36:12.249: E/AndroidRuntime(4848): Caused by: java.lang.IllegalArgumentException: Unknown pattern character 'Y' 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at java.text.SimpleDateFormat.validateFormat(SimpleDateFormat.java:268) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at java.text.SimpleDateFormat.validatePattern(SimpleDateFormat.java:316) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:369) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:253) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at com.example.calendardemo.MainActivity.onActivityResult(MainActivity.java:52) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at android.app.Activity.dispatchActivityResult(Activity.java:5368) 
02-08 15:36:12.249: E/AndroidRuntime(4848):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3205) 

Где я ошибаюсь?

Пожалуйста, помогите.

Спасибо.

ответ

1

Должно быть

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd); 

вместо

DateFormat formatter = new SimpleDateFormat("YYYY-MM-DD"); 

в SimpleDateFormat "Y" является Неизвестным образцом характером. Поэтому не используйте его, иначе вы получите get IllegalArgumentException.

+0

Спасибо, что работали :) – Android

+0

И заметьте, второе изменение , что «DD» был заменен на «dd» в этом правильном ответе. Верхний индекс означает «день-в-году», а не «день-в-месяц». –

1

Трассировка говорит, что это не так:

Unknown pattern character 'Y' 

Чтобы исправить это изменить:

DateFormat formatter = new SimpleDateFormat("YYYY-MM-DD"); 

To:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd); 
0

там не Captial у за год в Java формат даты, поэтому используйте маленький у

DateFormat formatter = new SimpleDateFormat("YYYY-MM-DD"); 

заменить

DateFormat formatter = new SimpleDateFormat("yyy-MM-DD"); 
+0

Упс, вы тоже пропустили проблему с «DD». См. [Правильный ответ] (http://stackoverflow.com/a/21644892/642706). –

Смежные вопросы