我有一个Java组件来格式化检索的日期。这是我的代码:
Format formatter = new SimpleDateFormat("yyyyMMdd"); String s = "2019-04-23 06:57:00.0"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss.S"); try { Date date = simpleDateFormat.parse(s); System.out.println("Formatter: "+formatter.format(date)); } catch (ParseException ex) { System.out.println("Exception "+ex); }
只要String具有以下格式,该代码就可以很好地工作 "2019-04-23 06:57:00.0";
"2019-04-23 06:57:00.0";
我的问题是,如何调整此代码,使其适用于以下场景,例如,我的s字符串可能具有如下值
s
String s = "2019-04-23 06:57:00.0"; or String s = "2019-04-23 06:57:00"; Or String s = "2019-04-23";
现在,如果我不通过短信,它将失败。
如果图案中有可选部件,则可以使用[和]。
[
]
例如
public static Instant toInstant(final String timeStr){ final DateTimeFormatter formatter = DateTimeFormatter .ofPattern("yyyy-MM-dd HH[:mm[:ss[ SSSSSSSS]]]") .withZone(ZoneId.of("UTC")); try { return Instant.from(formatter.parse(timeStr)); }catch (DateTimeException e){ final DateTimeFormatter formatter2 = DateTimeFormatter .ofPattern("yyyy-MM-dd") .withZone(ZoneId.of("UTC")); return LocalDate.parse(timeStr, formatter2).atStartOfDay().atZone(ZoneId.of("UTC")).toInstant(); } }
盖
yyyy-MM-dd
yyyy-MM-dd HH
yyyy-MM-dd HH:mm
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd HH:mm:ss SSSSSSSS