当locale是阿拉伯语时,android中的日期格式问题

时间:2014-12-14 12:07:21

标签: android date calendar arabic

我在这里遇到了一个严重的问题,我正在构建一个可以在阿拉伯语设备上运行的应用程序,我需要向服务器发送日期,我使用Android DatePickerDialog来获取日期,但是日期总是用阿拉伯字符发送,当我尝试再次显示它时,它给了我Unparsable日期例外

我尝试了以下解决方案,但没有结果

  • mDateTime = Calendar.getInstance(Locale.US).getTime();
  • mDateFormater.setTimeZone(TimeZone.getTimeZone( “GMT”));

但他们没有为我工作

请帮助。

我的日期选择器对话框代码如下所示

    public static class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    private TextView mUserView;
    private Date mAffectedDate;
    private SimpleDateFormat mDateFormater;
    private Date mInitialDate;

    public TextView getUserView() {
        return mUserView;
    }

    public void setUserView(TextView userView) {
        this.mUserView = userView;
    }

    public Date getAffectedDate() {
        return mAffectedDate;
    }

    public void setAffectedDate(Date mAffectedDate) {
        this.mAffectedDate = mAffectedDate;
    }

    public SimpleDateFormat getDateFormater() {
        return mDateFormater;
    }

    public void setDateFormater(SimpleDateFormat mDateFormater) {
        this.mDateFormater = mDateFormater;
    }

    public Date getInitialDate() {
        return mInitialDate;
    }


    public void setInitialDate(Date mInitialDate) {
        this.mInitialDate = mInitialDate;
    }


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance(Locale.US);
        c.setTime(mInitialDate);
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {

        Date date = new Date();
        date.setYear(year - 1900);
        date.setMonth(month);
        date.setDate(day);

        mAffectedDate.setYear(year - 1900);
        mAffectedDate.setMonth(month);
        mAffectedDate.setDate(day);
        mUserView.setText(mDateFormater.format(date));
    }
}

1 个答案:

答案 0 :(得分:3)

您可以使用:

Calendar.set(int year, int month, int day, int hourOfDay, int minute, int second)

设置年,月,日,小时,分钟和秒字段。其他领域则不然     改变;如果不需要,请先清除。月份值基于0,因此使用像JANUARY这样的常量可能更清楚。 像这样:

Calendar cal = Calendar.getInstance(Locale.US);
 public void onDateSet(DatePicker view, int year, int month, int day) {
  cal.set(year, month, day, 0, 0, 0);
  // get time in milliseconds
  Long timeInmilliseconds = cal.getTimeInMillis();
  // print time
  Log.v("log", "Date "+ new Date(cal.getTimeInMillis()));
 }

另见this

一个常见的错误是在生成意味着机器可读的输出时隐式使用默认语言环境。这往往适用于开发人员测试设备(特别是因为许多开发人员使用en_US),但在用户处于更复杂的语言环境的设备上运行时会失败。 例如,如果要格式化整数,则某些区域设置将使用非ASCII十进制数字。另一个例子,如果你要格式化浮点数,一些语言环境将使用','作为小数点和'。'用于数字分组。这对于人类可读的输出是正确的,但如果出现在另一台计算机上可能会导致问题(例如,parseDouble(String)无法解析这样的数字)。