当前位置: 首页 > 知识库问答 >
问题:

如何在Java8中格式化日期?[副本]

施慈
2023-03-14
 public static void main(String[] args) {
        List<String> dateList = new ArrayList<>();
        dateList.add("2010/03/30");
        dateList.add("15/12/2016");
        dateList.add("11-15-2012");
        dateList.add("20130720");
       changeDates(dateList);
    }

  public static List<String> changeDates(List<String> dates){
        List<String> returnedData = new ArrayList<>();

        dates.forEach(parsedDate ->{
            try {
                Date date1=new SimpleDateFormat("dd/MM/yyyy").parse(parsedDate);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                String yyyyMMdd = sdf.format(date1);
                System.out.println(yyyyMMdd);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        });

        return returnedData;
    }

谢谢,

共有1个答案

子车征
2023-03-14

你不能神奇地自动读取每一种可能的日期格式。您必须选择一些您支持的格式。

当您选择了一组要支持的格式后,您可以在每个日期尝试其中的每一种格式。当您发现一个解析器在输入上没有失败时,您就使用那个解析器。不过要小心这个。例如,您可能会在这样一种情况下结束,即您将每月的一天解析为一个月(例如,01-02-2020在理论上可以被解释为2020年2月1日和1月1日)。

我认为下面的代码适用于Java9及以上版本。注意,我使用的是java.time库,而不是旧的java.util.date

// These seemed to be the formats you used in your example. 
// "MM-dd-yyyy" is pretty weird I must say though.
private static final List<DateTimeFormatter> SUPPORTED_FORMATS = Arrays.asList(
        DateTimeFormatter.ofPattern("yyyy/MM/dd"),
        DateTimeFormatter.ofPattern("dd/MM/yyyy"),
        DateTimeFormatter.ofPattern("MM-dd-yyyy"),
        DateTimeFormatter.ofPattern("yyyyMMdd"));

private static final DateTimeFormatter OUTPUT_FORMAT = 
        DateTimeFormatter.ofPattern("yyyyMMdd");

public static Optional<LocalDate> tryParse(DateTimeFormatter formatter, String date) {
    try {
        return Optional.of(LocalDate.parse(date, formatter));
    } catch (DateTimeParseException e) {
        return Optional.empty();
    }
}

public static LocalDate parseSupportedDate(String date) {
    return SUPPORTED_FORMATS.stream()
            .flatMap(formatter -> tryParse(formatter, date).stream())
            .findFirst()
            .orElseThrow(() -> new IllegalArgumentException("Could not parse date " + date));
}

public static List<String> changeDates(List<String> dates) {
    return dates.stream()
            .map(date -> parseSupportedDate(date))
            .map(OUTPUT_FORMAT::format)
            .collect(Collectors.toList());
}
 类似资料:
  • 我有一个订单和it订单日期的数据库,然后it订单日期将上传到这样的数据库(3-3-2020) 然后在我的shop应用程序中,我使用JSON调用数据库,我想将3-3-2020转换为2020年3月的星期二 我尝试这个解决方案 但它给了我这个错误 那么如何重新格式化日期呢?

  • Java 8 添加了一个新的 java.time API 来处理日期和时间 (JSR 310)。 我有字符串形式的日期和时间(例如< code >“2014-04-08 12:30”)。如何从给定的字符串中获取< code>LocalDateTime实例? 在我完成对象的工作后:如何将实例转换回与上述格式相同的字符串?

  • 问题内容: 所以我有一个Date对象,我想创建一个方法,以便它以以下格式打印Date: 我怎么做?到目前为止,我只是对日期执行toString,它为我提供了我不需要的所有GMT信息和秒精度。我必须使用DateFormatter还是有更简单的方法来做到这一点? 编辑该标题后,将Java ME包含在标题中,并在发布了一些与原始问题正确的答案后添加标签。 问题答案: 您可以使用class设置日期格式。

  • 现在,我不知道有什么方法可以用这种格式解析给定的日期。

  • 问题内容: 我正在使用bootstrap-datetimepicker和ISO8601 datetime格式,如其选项部分所述 在我的控制器中 它以(console.log)将数据发送到后端 并保存为数据库 在我的模板中 我在HTML上看到的输出为 但是根据Angular doc,它应该用于格式 我想念的是什么? 问题答案: 现在,我已经创建了一个过滤器 作为依赖项添加为 并用作 并将日期显示为

  • 问题内容: 我正在从数据库中提取各种帖子的日期。日期采用以下格式: 如何将这些日期重新格式化为更用户友好的格式: 假设从mysql数据库获取的日期存储在名为: 问题答案: