日期字符串无法解析

时间:2016-04-25 06:11:49

标签: android string date datetime simpledateformat

我有一个日期格式的字符串,我想在日期对象中解析。我想在日历对象中将时间设置为字符串,并希望同时设置警报。

为此我尝试将字符串解析为日期但没有任何反应。没有设定时间剂量。

当我进行调试以检查时间是否在日历中设置时,发现它在解析后直接在方法结束时进行。

Date date = df.parse(alertDateTest);

我尝试用这种格式解析字符串:
  SimpleDateFormat df = new SimpleDateFormat("d MMM yyyy");

但是它给出了无效的格式异常。我应该使用哪种格式来解析这个字符串?

字符串格式为:d MMM yyyy

代码:

mAlertDate是2016年4月25日 alertDateTest是2016年4月25日

 public void updateNotification() {

        try {


            String alertDateTest = i.getStringExtra("taskAlertDate");
            String alertTimeTest = i.getStringExtra("taskAlertTime");

            SimpleDateFormat  df = new SimpleDateFormat("yyyy-MM-dd");

            Date date = df.parse(alertDateTest);


            if (alertDateTest.equals(mAlertDate)) {


                String formattedString = date.toString();
                Calendar c = Calendar.getInstance();

                c.set(Calendar.HOUR_OF_DAY, mHourOfTheDay);
                c.set(Calendar.MINUTE, mMinute);
                c.set(Calendar.SECOND, 0);

                mYear = new DateTime(formattedString).getYear();
                mMonth = new DateTime(formattedString).getMonthOfYear();
                mDayOfMonth = new DateTime(formattedString).getDayOfMonth();

                c.set(Calendar.YEAR, mYear);
                c.set(Calendar.MONTH, mMonth);
                c.set(Calendar.DAY_OF_MONTH, mDayOfMonth);

                date = c.getTime();

                Log.d("AlertDate", String.valueOf(date));
                Toast.makeText(AddTaskActivity.this, String.valueOf(date), Toast.LENGTH_SHORT).show();

                intent = new Intent(AddTaskActivity.this, NotificationReceiver.class);
                pendingIntent = PendingIntent.getBroadcast(getBaseContext(), _mId, intent, 0);
                alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                alarmManager.set(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent);


        } catch (ParseException e) {

        }
    }

编辑:

我有一个函数onDateSet的日期选择器,我有一个字符串格式,字符串格式化为相同的格式:

 @Override
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
     //   String date = "You picked the following date: "+dayOfMonth+"/"+(++monthOfYear)+"/"+year;

        SimpleDateFormat  df = new SimpleDateFormat("d MMM yyyy");
        mCalendar = Calendar.getInstance();
        mCalendar.set(Calendar.YEAR, year);
        mCalendar.set(Calendar.MONTH, monthOfYear);
        mCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

        Date date = mCalendar.getTime();



       if(DATE_PICKER_TAG == 1)
        {
            mYear = year;
            mMonth = monthOfYear;
            mDayOfMonth = dayOfMonth;

            mAlertDate  = df.format(date);
            alertDate.setText(String.valueOf(mAlertDate));
        }
       if(DATE_PICKER_TAG == 3) {

            mDueDate  = df.format(date);
            dueDate.setText(String.valueOf(mDueDate));
        }
    }
编辑:尝试你的答案Umesh Saraswat

            String alertDateTest = i.getStringExtra("taskAlertDate");
            String alertTimeTest = i.getStringExtra("taskAlertTime");

            SimpleDateFormat simpleDateFormate = new SimpleDateFormat("dd MMM yyyy");

            Date  date = simpleDateFormate.parse(alertDateTest);

          //  Date date = df.parse(alertDateTest);


            if (alertDateTest.equals(mAlertDate)) {


                String formattedString = date.toString();
                Calendar c = Calendar.getInstance();

                c.set(Calendar.HOUR_OF_DAY, mHourOfTheDay);
                c.set(Calendar.MINUTE, mMinute);
                c.set(Calendar.SECOND, 0);

                c.setTime(date);



                c.set(Calendar.YEAR, mYear);
                c.set(Calendar.MONTH, mMonth);
                c.set(Calendar.DAY_OF_MONTH, mDayOfMonth);

                date = c.getTime();

我得到的日期是12月31日。字符串是2016年4月26日。时间没有设定。

谢谢..

4 个答案:

答案 0 :(得分:1)

使用25 Apr 2016使用dd MMM yyyy字符串格式解析日期字符串。

有关详细信息,请访问SimpleDateFormat

答案 1 :(得分:1)

您可以使用“dd MMM yyyy”或“d MMM yyyy”

答案 2 :(得分:1)

我理解你的问题,

  

有一个日期格式的字符串,我想在日期对象中解析。   对于第一个需要将字符串日期解析为日期格式化

byte[] buff = client.DownloadData(sFilePath);
  

我想在日历对象中将时间设置为字符串,并希望设置一个   同时发出警报。

SimpleDateFormate simpleDateFormate = new SimpleDateFormate("dd MMM yyyy");
Date  date = simpleDateFormate.parse("Your date");

如果要将Calendar对象日期用于String formate,那么

Calendar c = Calendar.getInstance();
calendar.setTime(date)
c.set(Calendar.HOUR_OF_DAY, mHourOfTheDay);
 c.set(Calendar.MINUTE, mMinute);
 c.set(Calendar.SECOND, 0);

答案 3 :(得分:0)

刚刚将Locale添加到格式中并且有效..

SimpleDateFormat simpleDateFormate = new SimpleDateFormat(" dd MMM yyyy",Locale.ENGLISH);

谢谢大家..