SimpleDateFormat 字符串到星期几

SimpleDateFormat String to Day of Week

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

获得了 Date

我的活动显示在 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 监视器中收到此错误:

java.lang.IllegalArgumentException: Cannot format given Object as a Date

所以,我假设我的数据库有问题。

显示我的约会对象时 String 显示如下:28-10-2017

我不知道为什么这不能格式化。

您需要将代码更改为:

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;
}

使用以下方法: 保持格式标准和相同

 /**
     * 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 "";
        }
    }

由于您在此模式中的日期是 28.10.2017,因此您需要按如下方式更改日期格式:-

 SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");