在 android 中的自定义日期时间选择器中显示本地格式
Displaying local format in a custom dateTime picker in android
我是初学者,目前正在制作一个提醒应用程序。到目前为止,此应用执行以下操作:
- 当您单击日期时间选择器时,它会打开我的自定义日期时间选择器
- 你 select 日期和时间(从现在起至少 10 分钟,在接下来的 30 天内)
- 您select编辑的日期和时间显示在屏幕上的 TextView 字段中
由于没有日期时间选择器,我定制了一个。我尝试了多种方法,这是唯一对我有用的方法。所以现在我遇到了这个问题 - 我想显示与 phone 上的格式相同的日期和时间格式 - 对于美国来说是 month/day/year 和 AM/PM,欧洲 day/month/year 和 24 小时制。如果没有办法做到这一点,我想至少显示月份名称——比如 03 Mar。我使用 StringBuilder 附加日、月和年。如果日期是 02/03/2016,这可能会造成混淆。至于时间,我显示的是 24 小时格式,一位数字添加了“0”。
正如我所说,我是初学者,所以我在使用 this with StringBuilder. I also tried 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);
}
您可以根据需要更改格式,示例如下。
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));
或者你可以从日历中取出年月日并格式化它。
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());
我是初学者,目前正在制作一个提醒应用程序。到目前为止,此应用执行以下操作:
- 当您单击日期时间选择器时,它会打开我的自定义日期时间选择器
- 你 select 日期和时间(从现在起至少 10 分钟,在接下来的 30 天内)
- 您select编辑的日期和时间显示在屏幕上的 TextView 字段中
由于没有日期时间选择器,我定制了一个。我尝试了多种方法,这是唯一对我有用的方法。所以现在我遇到了这个问题 - 我想显示与 phone 上的格式相同的日期和时间格式 - 对于美国来说是 month/day/year 和 AM/PM,欧洲 day/month/year 和 24 小时制。如果没有办法做到这一点,我想至少显示月份名称——比如 03 Mar。我使用 StringBuilder 附加日、月和年。如果日期是 02/03/2016,这可能会造成混淆。至于时间,我显示的是 24 小时格式,一位数字添加了“0”。
正如我所说,我是初学者,所以我在使用 this with StringBuilder. I also tried 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);
}
您可以根据需要更改格式,示例如下。
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));
或者你可以从日历中取出年月日并格式化它。
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());