格式错误的日期与dd-MMM-yy

时间:2020-07-10 09:15:36

标签: java date time simpledateformat

我有以下输入String "30-JUL-21"作为日期,我想转换为Instant。 但是我找不到正确的解决方案...你有主意吗?
我已经尝试过

SimpleDateFormat sdfmt2 = new SimpleDateFormat("dd-MMM-yy");
result = sdfmt2.parse(source).toInstant();

但是它不能正常工作。

我的代码:

String src = "30-JUL-21";
Instant result = null;

if (!StringUtils.isEmpty(src)) {
    try {
        SimpleDateFormat sdfmt2= new SimpleDateFormat("dd-MMM-yy");
        result = sdfmt2.parse(src).toInstant();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

return result;

1 个答案:

答案 0 :(得分:3)

您可以构建一个registers.af来不区分大小写地解析,并使用英语DateTimeFormatter和匹配的模式,因为您对月份的表示不能仅通过模式来解析。

请参见以下示例,其中每个步骤均已明确完成,并且UTC用作时区。或者,您可以通过将Locale替换为ZoneId.of("UTC")来使用系统的时区,当然,如果系统的时区不是UTC,则这将影响输出。因为我不知道您的时区(对吗?),所以我在这里选择UTC来获得可比的输出:

ZoneId.systemDefault()

它的输出是这样(最后打印使用结果public static void main(String[] args) { // example input String source = "30-JUL-21"; // create a formatter that parses case-insensitively using a matching pattern DateTimeFormatter caseInsensitiveDtf = new DateTimeFormatterBuilder() .parseCaseInsensitive() .appendPattern("dd-MMM-uu") .toFormatter(Locale.ENGLISH); // parse the String using the previously defined formatter LocalDate localDate = LocalDate.parse(source, caseInsensitiveDtf); // print this intermediate result System.out.println(localDate); // build up a datetime by taking the start of the day and adding a time zone ZonedDateTime zdt = localDate.atStartOfDay(ZoneId.of("UTC")); // print that intermediate result, too System.out.println(zdt); // then simply convert it to an Instant Instant instant = zdt.toInstant(); // and print the epoch millis of it System.out.println(instant.toEpochMilli()); } ):

Instant