在android

时间:2016-03-03 12:13:49

标签: java android datetime locale

我是初学者编码器,目前正在制作提醒应用。到目前为止,这个应用程序执行以下操作:

  • 当您点击日期时间选择器时,它会打开我的自定义日期时间选择器
  • 您选择日期和时间(即从现在起至少10分钟,并在接下来的30天内)
  • 您选择的日期和时间显示在屏幕上的TextView字段中

由于没有日期时间选择器,我自定义了一个。我尝试了很多方法,这是唯一适合我的方法。所以现在我有这个问题 - 我想显示与手机格式相同的日期和时间格式 - 对于美国,它将是月/日/年和上午/下午,欧洲日/月/年和24小时格式。如果没有办法做到这一点,我想至少显示月份名称 - 比如3月3日 。我使用StringBuilder追加日,月和年。如果日期是例如02/03/2016,这可能会令人困惑。至于我显示24小时格式的时间,添加" 0"一位数字。

正如我所说我是初学者所以我在使用this和StringBuilder这样的例子时遇到了问题。我也尝试this示例而不是StringBuilder,但我得到但是我得到了不兼容的类型错误:需要android.widget.TextView,找到了java.lang.String。

我目前显示日期和时间的方式显示在" //更新日期和时间"部分。其余的代码可供任何需要创建自定义日期时间选择器的人参考:)

private Button mPickDate;
private TextView mDateDisplay;
private TextView mTimeDisplay;

final Calendar c = Calendar.getInstance();
private int mYear = c.get(Calendar.YEAR);
private int mMonth = c.get(Calendar.MONTH);
private int mDay = c.get(Calendar.DAY_OF_MONTH);
private int mHour = c.get(Calendar.HOUR_OF_DAY);
private int mMinute = c.get(Calendar.MINUTE);

static final int TIME_DIALOG_ID = 1;
static final int DATE_DIALOG_ID = 0;

其余的代码:

//Update date and time
private void updateDate() {
    mDateDisplay.setText(
            new StringBuilder()
                    .append(mDay).append("/")
                    .append(mMonth + 1).append("/")
                    .append(mYear).append(" "));
    showDialog(TIME_DIALOG_ID);
}

public void updateTime() {
    mTimeDisplay.setText(
            new StringBuilder()
                    .append(pad(mHour)).append(":")
                    .append(pad(mMinute)));
}

// Append 0 if number < 10
private static String pad(int c) {
    if (c >= 10)
        return String.valueOf(c);
    else
        return "0" + String.valueOf(c);
}

// Generate DatePickerDialog and TimePickerDialog
private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year,
                                  int monthOfYear, int dayOfMonth) {
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
                updateDate();
            }
        };

private TimePickerDialog.OnTimeSetListener mTimeSetListener =
        new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mHour = hourOfDay;
                mMinute = minute;

                Calendar c2 = Calendar.getInstance();

                if (mYear == c2.get(Calendar.YEAR)
                        && mMonth == c2.get(Calendar.MONTH)
                        && mDay == c2.get(Calendar.DAY_OF_MONTH)
                        && (mHour < c2.get(Calendar.HOUR_OF_DAY) || (mHour == c2.get(Calendar.HOUR_OF_DAY) && mMinute <= (c2.get(Calendar.MINUTE) + 10))
                )
                        ) {

                    Toast.makeText(SetDateTimeActivity.this, "Set time at least 10 minutes from now", Toast.LENGTH_LONG).show();
                } else {
                    updateTime();
                }

            }
        };

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DATE_DIALOG_ID:
            DatePickerDialog datePickerDialog = new DatePickerDialog(this,
                    mDateSetListener,
                    mYear, mMonth, mDay);
            c.add(Calendar.MONTH, +1);
            long oneMonthAhead = c.getTimeInMillis();
            datePickerDialog.getDatePicker().setMaxDate(oneMonthAhead);
            datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
            return datePickerDialog;

        case TIME_DIALOG_ID:
            TimePickerDialog timePickerDialog =
                    new TimePickerDialog(this,
                            mTimeSetListener, mHour, mMinute, false);

            return timePickerDialog;
    }
    return null;
}

提前谢谢你:)

编辑 - 我在代码中使用的解决方案:

// Update date and time
private void updateDate() {
    c.set(mYear, mMonth, mDay);
    String date = new SimpleDateFormat("MMM dd, yyyy").format(c.getTime());
    mDateDisplay.setText(date);

    showDialog(TIME_DIALOG_ID);
}

public void updateTime() {
    c.set(mYear, mMonth, mDay, mHour, mMinute); // check why do I need to add year,month,day
    String time = new SimpleDateFormat(" hh:mm a").format(c.getTime());
    mTimeDisplay.setText(time);
}

1 个答案:

答案 0 :(得分:1)

您可以在下面更改您想要的格式示例。

String strCurrentDate = "Wed, 18 Apr 2012 07:55:29 +0000";
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss Z");
Date newDate = format.parse(strCurrentDate);

format = new SimpleDateFormat("MMM dd,yyyy hh:mm a");
String date = format.format(newDate);

或您的本地格式

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy HH:mm", Locale.getDefault());
String formatted = sdf .format(900000);
System.out.println(simpleDateFormat.parse(formatted));

或者您可以从calander获取一年的月份并格式化。

   Calendar cal = Calendar.getInstance();
    cal.get(Calendar.YEAR);
    cal.get(Calendar.DAY_OF_MONTH);
    cal.get(Calendar.MONTH);
    String format = new SimpleDateFormat("E, MMM d, yyyy").format(cal.getTime());

您只需更改格式搜索美国日期格式的格式即可将其放入

SimpleDateFormat("here").format(cal.getTime());