SimpleDateFormat - IST时区的Unparsable Date异常。怎么了?

时间:2015-10-28 12:02:09

标签: java simpledateformat

我的格式为日期字符串:

Oct 28, 2015, 05.15PM IST

所以我想使用SimpleDateFormat将它解析为Date对象:

String date = "Oct 28, 2015, 05.15PM IST";
SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy, hh.mmaa zzz", Locale.US);
Date myDate = format.parse(date);

但我得到例外:

java.text.ParseException: Unparseable date: "Oct 28, 2015, 05.15PM IST" (at offset 22)

我做错了什么?

2 个答案:

答案 0 :(得分:0)

根据我在指定AM / PM组件时对SimpleDateFormat的理解,您不需要使用两个a或三个z。您正在尝试解析" 2015年10月28日,05.15PM IST"具有多个AM / PM说明符,以及多个时区说明符。将格式对象更改为SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy, hh.mma z", Locale.US);

答案 1 :(得分:0)

问题是SimpleDateFormat无法解析" IST"作为时区因为它含糊不清。

我根据 Adriaan Koster's answer解决了这个问题。 但实际上它只适用于我切割后#34; IST"从我的日期字符串。 因此问题的完整解决方案如下:

Uri fileUri = data.getData();
Bitmap b = decodeUri(fileUri);
your_image_view.setImageBitmap(b); 


// here decodeUri method will directly return you Bitmap which can be set to imageview

private Bitmap decodeUri(Uri selectedImage) throws FileNotFoundException 
    {
        BitmapFactory.Options o = new BitmapFactory.Options();

        o.inJustDecodeBounds = true;

        BitmapFactory.decodeStream(getContentResolver()
                .openInputStream(selectedImage), null, o);

        final int REQUIRED_SIZE = 72;

        int width_tmp = o.outWidth, height_tmp = o.outHeight;

        int scale = 1;

        while (true) 
        {
            if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE) 
            {
                break;
            }
            width_tmp /= 2;

            height_tmp /= 2;

            scale *= 2;
        }

        BitmapFactory.Options o2 = new BitmapFactory.Options();

        o2.inSampleSize = scale;

        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver()
                .openInputStream(selectedImage), null, o2);

        return bitmap;
    }