我目前正在创建自定义日期格式,以使其显示为“ 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());
}
答案 0 :(得分:1)
要实现这种格式: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()));
}
答案 1 :(得分:0)
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(JSR-310的ThreeTen)的反向端口。