SimpleDateFormat提前一天

时间:2017-08-24 14:36:50

标签: android simpledateformat

我正在尝试使用SimpleDateFormat显示日期。我的问题是,如果我格式化为星期四(法国)的2017年8月31日的格式显示为星期五。它每天都这样做。

我首先在 DatePickerDialog

中获取日期
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

private OnPickerSet mListener;

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    return new DatePickerDialog(getActivity(), this, year, month, day);
}

public void onDateSet(DatePicker view, int year, int month, int day) {
    mListener.onDateSet(new Date(year,month,day));
}

public void setOnPickerSetListener(OnPickerSet listener) {
    mListener = listener;
}
}

日期

class Date extends java.util.Date {

SimpleDateFormat formatter = new SimpleDateFormat("EEE dd MMM", Locale.FRANCE);

public Date() {
    // I don't want it set here
}

public Date(int year, int month, int day) {
    super(year, month, day);
}

@Override
public String toString() {
    formatter.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
    return formatter.format(this);
}
}

我没有按照约会进行任何计算,所以我不明白为什么?

1 个答案:

答案 0 :(得分:1)

首先,您必须修改Date

的构造函数
super((year-1900), month, day);

javadoc

中的更多相关信息

其次,您必须从toString方法中删除该行

formatter.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));

第三,更重要的是,放弃使用如此多的弃用方法和构造函数扩展类的整个想法。您可以将格式代码放在实用程序类中,并使用方法Calendar.getTime()从日历中获取Date类。