我有一个应用程序,我想在' From'中更改日期格式。和' To'。
让我们假设,我有一个像2018-06-11 - 2018-06-14
这样的日期范围。现在,我想以其他格式更改为11 June, 2018 - 14 June, 2018
。
请参考下面的代码,我尝试过:
String strDate = "2018-06-11 - 2018-06-14";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = format.parse(strDate);
format = new SimpleDateFormat("dd MMMM, yyyy");
String strFinalDate = format.format(date);
tv4.setText(strFinalDate);
} catch (ParseException e) {
e.printStackTrace();
}
另外,我也尝试了下面的代码:
String strDate = "2018-06-11 - 2018-06-14";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd - yyyy-MM-dd");
try {
Date date = format.parse(strDate);
format = new SimpleDateFormat("dd MMMM, yyyy - dd MMMM, yyyy");
String strFinalDate = format.format(date);
tv4.setText(strFinalDate);
} catch (ParseException e) {
e.printStackTrace();
}
首先,代码集运行顺畅,但仅转换' From'并且甚至不检查' To'日期。
并且,第二组代码返回一个错误,表示java.text.ParseException: Unparseable date: "2017-01-11 - 2017-01-14
我是否跳过此代码中的任何内容?
如果有,请通知我。
谢谢!
答案 0 :(得分:2)
我建议
DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
String strDate = "2018-06-11 - 2018-06-14";
String[] strDates = strDate.split(" - ");
if (strDates.length != 2) {
throw new IllegalStateException("Wrong range format " + strDate
+ ", must be yyyy-MM-dd - yyyy-MM-dd");
}
String strFinalDate = LocalDate.parse(strDates[0]).format(dateFormatter)
+ " - " + LocalDate.parse(strDates[1]).format(dateFormatter);
System.out.println(strFinalDate);
使用美国英语语言环境在我的Java上输出:
2018年6月11日 - 2018年6月14日
你在“六月”之后没有得到逗号,因为这不是标准的,所以考虑一下这不是一个真正的优势。输出将取决于区域设置,这也可能是一个优势。或者指定显式语言环境,例如:
DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG)
.withLocale(Locale.UK);
我正在使用并推荐java.time
,现代Java日期和时间API。
无论您使用旧的Date
还是现代的LocalDate
,这样的对象只能包含一个日期,而不是日期范围。在您第一次尝试时SimpleDateFormat
解析了第一个日期(因为它与您的模式匹配),然后忽略了字符串的其余部分。所以当你格式化解析日期时,你得到了
2018年6月11日
在秒尝试中,两个日期都被解析,但是被分析到同一个Date
对象中,所以只保留了第二个日期的值。打印日期时,其值也会打印两次,因为格式化的格式包含格式两次:
2018年6月14日 - 2018年6月14日
是的,java.time
适用于较旧和较新的Android设备。它只需要至少Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7的后端(JST-310的ThreeTen)。答案 1 :(得分:0)
正如我在上面的评论中所述,您必须将strDate
String
分成两个不同的String
变量。看看下面的代码
String strDate = "2018-06-11 - 2018-06-14";
String[] fromToDatesStr = strDate.split(" - ");
String fromDateStr = fromToDatesStr[0];
String toDateStr = fromToDatesStr[1];
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date fromDate = null;
Date toDate = null;
try {
fromDate = format.parse(fromDateStr);
toDate = format.parse(toDateStr);
format = new SimpleDateFormat("dd MMMM, yyyy");
String strFromFinalDate = format.format(fromDate);
String strToFinalDate = format.format(toDate);
} catch (ParseException e) {
e.printStackTrace();
}
String strFromFinalDate
和String strToFinalDate
现在包含根据您的需要格式化的日期。