一尘不染

Java-多种方案的日期格式

java

我有一个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";

我的问题是,如何调整此代码,使其适用于以下场景,例如,我的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";

现在,如果我不通过短信,它将失败。


阅读 392

收藏
2020-12-03

共1个答案

一尘不染

如果图案中有可选部件,则可以使用[]

例如

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
2020-12-03