我目前正在创建一个自定义日期格式,它应该显示为“2019年4月8日星期一”,但每当我从对话框中选择并应用简单的日期格式时,它会返回缩写的月份和时间的日期(我不需要)。任何想法我如何更新我的代码,使其以上述格式工作?这是我的代码:
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
String date = (++monthOfYear)+" "+dayOfMonth+", "+year;
SimpleDateFormat dateFormat = new SimpleDateFormat("E MMM dd yyyy");
dateFormat.format(new Date());
Date convertedDate = new Date();
try {
convertedDate = dateFormat.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myDate.setText(convertedDate.toString());
}
要实现这样的格式:Monday, April 8, 2019
你必须像这样(source)格式化日期:
SimpleDateFormat mDateFormat = new SimpleDateFormat("EEEE, MMMMM dd, yyyy");
myDate.setText(mDateFormat.format(convertedDate));
祝好运
我会做这样的事情:
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
Calendar mDate = Calendar.getInstance();
mDate.set(year, monthOfYear, dayOfMonth);
SimpleDateFormat mDateFormat = new SimpleDateFormat("EEEE, MMMMM dd, yyyy");
myDate.setText(mDateFormat.format(mDate.getTime()));
}
DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
.withLocale(Locale.US);
LocalDate date = LocalDate.of(year, ++monthOfYear, dayOfMonth);
String formattedDate = date.format(dateFormatter);
2019年4月8日,星期一
不要为通过格式模式字符串定义自己的日期格式而烦恼。您想要的格式已经内置。
我正在使用java.time,现代Java日期和时间API。您尝试使用的日期/时间段,SimpleDateFormat
和Date
,已经过时且设计不佳,前者尤其出了名的麻烦,所以我不想使用它们。
是的,java.time适用于较旧和较新的Android设备。它至少需要Java 6。
org.threeten.bp
导入子包的日期和时间类。year
,monthOfYear
和dayOfMonth
组合成一个你试图解析的字符串,这是绕道而行,但更糟糕的是,字符串没有格式化E MMM dd yyyy
,所以用你的SimpleDateFormat
解析它可能会失败。如果您还没有看到e.printStackTrace();
的堆栈跟踪,我建议您在编写另一个代码行之前在项目设置中遇到严重问题。如果您没有看到代码中发生的错误,那么您将被蒙上眼睛。解析错误导致显示从new Date()
获得的当前日期。convertedDate.toString()
返回格式为EEE MMM dd HH:mm:ss zzz yyyy
的字符串以显示。例如Tue Apr 09 09:39:47 EDT 2019
。 Date.toString
始终返回此格式。它与解析日期的格式无关(即使它已被成功解析),因为Date
只是一个时间点,它不能有格式。java.time
首次被描述。java.time
的后端到Java 6和7(JST-310的ThreeTen)。