我有类从其他类接收字符串格式的日期。它现在接收两个不同的格式基于字符串选择日期格式
格式1:YYYY_MM_DD
格式2:EEE MMM DD HH:MM:SSžYYYY
现在我想写接收到该字符串的方法,并将其转换进入这样的“DDMMMYYYY”
我有类从其他类接收字符串格式的日期。它现在接收两个不同的格式基于字符串选择日期格式
格式1:YYYY_MM_DD
格式2:EEE MMM DD HH:MM:SSžYYYY
现在我想写接收到该字符串的方法,并将其转换进入这样的“DDMMMYYYY”
要求的格式,您可以尝试蛮力解析捕获异常:
使用java8 API(适应的格式,因为你需要/想)
public String convertDateFormatJ8(String format) {
String retFormat = "ddMMyyy";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("[yyyy_dd_MM][yyyy-MM-dd HH:mm]");
try {
LocalDateTime localDate = LocalDateTime.parse(format, formatter);
return localDate.format(DateTimeFormatter.ofPattern(retFormat));
} catch (DateTimeParseException ex) {
System.err.println("impossible to parse to yyyy-MM-dd HH:mm");
}
try {
LocalDate localDate = LocalDate.parse(format, formatter);
return localDate.format(DateTimeFormatter.ofPattern(retFormat));
} catch (DateTimeParseException ex) {
System.err.println("impossible to parse to yyyy_dd_MM");
}
return null;
}
老的Java版本
public String convertDateFormat(String format) {
DateFormat df1 = new SimpleDateFormat("YYYY_MM_DD");
DateFormat df2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
DateFormat dfResult = new SimpleDateFormat("DDMMMYYYY ");
Date d = null;
try {
d = df1.parse(format);
return dfResult.format(d);
} catch (ParseException e) {
System.err.println("impossible to parse to " + "YYYY_MM_DD");
}
try {
d = df2.parse(format);
return dfResult.format(d);
} catch (ParseException e) {
System.err.println("impossible to parse to " + "EEE MMM dd HH:mm:ss z yyyy");
}
return null;
}
如果你给其他任何无效的字符串,返回的字符串将是空的!
你错过了将日期转换为像DDMMMYYYY这样的字符串的第三个DateFormat ;-) – aexellent
Holy pattern,Thanks !! –
请不要教年轻人使用过时的SimpleDateFormat和朋友。今天我们好多了。例如见[Andriy Rymar的回答](https://stackoverflow.com/a/44302191/5772882)。 –
您可以使用此方法,并在图案声明可选部分:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("[yyyy_MM_dd][EEE MMM dd HH:mm:ss Z yyyy]", Locale.ENGLISH);
这formatter
将解析日期为两个模式,然后你可以很容易地将其转换为所需要的格式。
P.S.我已经测试过它,但不知道哪个日期应该可以解析为EEE MMM dd HH:mm:ss Z yyyy
模板。因此,只需使用它并使用Java 8方法(Java时间)
[这里是](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)解释如何使用它。 –
在格式模式字符串中,第一种格式应该写为yyyy_MM_dd,小写字母y和d(大写字母Y代表以周为单位的年份,仅在周数中有用;大写字母D代表年份中的日期)。 –
@AndriyRymar As Ole V.V.评论,你在这个答案中的代码*非常*破碎。请修复或删除。 –
您的意思是可以处理format1和format2然后导致DDMMMYYYY? –
@ΦXocę웃Пepeúpaツ是的,确切地说 – Raj
我宁愿使用两个'DateTimeFormatter'对象。尝试使用其中一个解析为“LocalDate”,如果抛出DateTimeParseException,则使用另一个解析。最后使用第三种格式转换为所需的格式。记住:年份是小写'yyyy'或'uuuu',月份的日期是小写'dd'。并给你的格式化器适当的区域设置。 –