Java 如何将日期字符串转换为自定义日期格式?
我目前正在创建一个自定义日期格式,以便显示为“2019年4月8日星期一” 但每当我从对话框中选择并应用简单的日期格式时,它都会返回带有缩写月份和时间的日期(我不需要)。你知道我如何更新我的代码,让它以上面的格式工作吗? 这是我的密码:Java 如何将日期字符串转换为自定义日期格式?,java,android,date-formatting,android-datepicker,android-date,Java,Android,Date Formatting,Android Datepicker,Android Date,我目前正在创建一个自定义日期格式,以便显示为“2019年4月8日星期一” 但每当我从对话框中选择并应用简单的日期格式时,它都会返回带有缩写月份和时间的日期(我不需要)。你知道我如何更新我的代码,让它以上面的格式工作吗? 这是我的密码: @Override public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) { String date = (++mo
@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());
}
要实现这种格式:
2019年4月8日,星期一
您必须将日期格式化如下:
祝你好运
我会这样做:
@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()));
}
java.time和ThreeTenABP
2019年4月8日,星期一
不用费心通过格式模式字符串定义自己的日期格式。所需的格式已内置
我正在使用java.time,这是现代的java日期和时间API。您尝试使用的日期/时间类别,SimpleDateFormat
和date
,早已过时且设计拙劣,其中前者特别麻烦,因此我不想使用它们
问题:我可以在Android上使用java.time吗?
是的,java.time在较旧和较新的Android设备上运行良好。它至少需要Java6
- 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
- 在Java6和Java7中,获取三个后端口,即现代类的后端口(三个十用于JSR310;参见底部的链接)
- 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
导入日期和时间类org.threeten.bp
- 首先,您正在将传入的
、year
和monthOfYear
组合成一个您试图解析的字符串,这是一个迂回的过程,但更糟糕的是,该字符串没有格式dayOfMonth
,因此使用E MMM dd yyyy
解析它可能失败。如果您没有在SimpleDateFormat
e.printStackTrace()中看到stacktrace代码>,我建议您的项目设置中有一个严重的问题,您应该在编写另一行代码之前解决这个问题。如果您没有看到代码中发生的错误,那么您就是蒙着眼睛编码。分析错误导致显示从
获取的当前日期new date()
返回一个字符串,格式为convertedDate.toString()
。例如,2019年4月9日星期二09:39:47美国东部夏令时<代码>日期。toString始终返回此格式。它与解析日期的格式无关(即使已成功解析),因为EEE-MMM-dd-HH:mm:ss-zzz-yyyy
只是一个时间点,它不能包含格式date
- 解释如何使用java.time
- ,其中首先描述了
java.time
- ,java.time的后端口到Java6和Java7(JSR-310为三十)
- ,Android版Three Ten Backport
- ,解释得非常透彻
java.time
。和它一起工作真是太好了。可能的复制品或可能的复制品
@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);