【问题标题】:Getting exception while converting date format转换日期格式时出现异常
【发布时间】:2014-02-08 10:20:15
【问题描述】:

在我的应用程序中,我使用了自定义日历视图和日历适配器,我通过 Intent 以 yyyy-MM-dd 格式从自定义 CalendarView.java 获取日期,并且一切正常。但是当我尝试将其转换为 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)

我哪里错了?

请帮忙。

谢谢。

【问题讨论】:

    标签: android date date-format


    【解决方案1】:

    应该是

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

    而不是

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

    在 SimpleDateFormat “Y” 中是未知模式字符。所以不要使用它,否则你会 得到 IllegalArgumentException

    【讨论】:

    • 并注意第二个变化,在这个正确答案中,“DD”被“dd”取代。大写的意思是“一年中的一天”,而不是“一个月中的一天”。
    【解决方案2】:

    跟踪说明出了什么问题:

    Unknown pattern character 'Y'
    

    修复它的变化:

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

    收件人:

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

    【讨论】:

      【解决方案3】:

      java日期格式中没有大写的y,所以使用小y

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

      替换为

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

      【讨论】:

      • 哎呀,你也错过了“DD”的问题。请参阅correct answer
      猜你喜欢
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 2017-03-16
      相关资源
      最近更新 更多