SimpleDateFormat字符串到星期几

时间:2017-09-22 12:59:57

标签: android string simpledateformat date-formatting dayofweek

我在Android中有一个SQLite数据库,其中特定事件的日期保存为String。我通过Date得到了DatePickerDialog

我的活动会显示在ListView中,因此我希望按日期对其进行排序,并从每个String获取星期几。

我知道我必须将我的String转换为SimpleDateFormat,然后获取当天并使事件具有可比性。但我得到的只是ParseException

这是我插入数据库的String

 private void handleDateDialog() {
    setDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Calendar cal = Calendar.getInstance();
            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH);
            int day = cal.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog dialog = new DatePickerDialog(CreateEvent.this,android.R.style.Theme_Holo_Light_Dialog_MinWidth,dateSetListener,year,month,day);

            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            dialog.show();
        }
    });

    dateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int day) {
            month += 1;
            String input = day + "-" + month + "-" + year;
            dateSelected.setText(input);
        }
    };
}

这是我通过阅读其他问题从Stack Overflow获得的:

public String getDayOfWeek(){
    String eventDate = this.getDate();
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
    try {
        Date myDate = dateFormat.parse(eventDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    dateFormat.applyPattern("EE");
    String dayofweek = dateFormat.format(date);
    return dayofweek;
}

这就是我尝试将新String dayOfWeek加入ListView的方法:

try {
    holder.day_of_week.setText(individualEvent.getDayOfWeek());
} catch (Exception e) {
    e.printStackTrace();
}

但我总是在Android Monitor中收到此错误:

  

java.lang.IllegalArgumentException:无法将给定的Object格式化为日期

所以,我认为我的数据库出了问题。

显示我的日期String时,它显示如下:28-10-2017

我不知道为什么这不是可以形成的。

3 个答案:

答案 0 :(得分:0)

您需要将代码更改为:

public String getDayOfWeek(){
    String eventDate = this.getDate();
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
    try {
        Date myDate = dateFormat.parse(eventDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    dateFormat.applyPattern("EE");
    String dayofweek = dateFormat.parse(myDate);
    return dayofweek;
}

答案 1 :(得分:-1)

使用以下方法: 保持格式标准和所有

相同
 /**
     * Parses @date to String in provided @format
     *
     * @param date   Date
     * @param format Convert to Format
     * @return formatted date string
     */
    public static String DateToString(Date date, String format) {
        if (date != null) {
            try {
                DateFormat dateFormat = new SimpleDateFormat(format);
                return dateFormat.format(date);
            } catch (Exception e) {
                e.printStackTrace();
                return "";
            }
        } else {
            return "";
        }
    }
 /**
     * Parses String to date in provided {@link Format } as String
     *
     * @param date   String date
     * @param format Format
     * @return Date
     */
    public static Date StringToDate(String date, String format) {
        if (date != null && !date.isEmpty() && date.length() > 0) {
            try {
                DateFormat dateFormat = new SimpleDateFormat(format);
                return dateFormat.parse(date);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        } else {
            return null;
        }
    }

    /**
     * Parses date String to date String in provided {@link Format } fromFormat to toFormat as String
     *
     * @param date       String date
     * @param fromFormat fromFormat
     * @param toFormat   toFormat
     * @return Format String date
     */
    public static String StringToString(String date, String fromFormat, String toFormat) {
        if (date != null && !date.isEmpty()) {
            try {
                SimpleDateFormat formatter = new SimpleDateFormat(fromFormat);
                Date tempDate = formatter.parse(date);
                DateFormat dateFormat = new SimpleDateFormat(toFormat);
                return dateFormat.format(tempDate);
            } catch (Exception e) {
                e.printStackTrace();
                return "";
            }
        } else {
            return "";
        }
    }

答案 2 :(得分:-1)

由于您的日期是28.10.2017,因此您需要更改日期格式,如下所示: -

 SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
相关问题