【问题标题】:Reformat custom date from string [duplicate]从字符串重新格式化自定义日期[重复]
【发布时间】:2020-09-05 16:43:20
【问题描述】:

我正在获取格式为 yyyy-MM-dd 的日期。 我将这些提取为一个字符串,如下所示:

String date = "2020-09-05";

现在我想把它转换成EEE, d MMM yyyy格式,所以结果应该是:Sat, 5 Sep 2020。 我尝试像这样重新格式化它:

Date convertedDate = new SimpleDateFormat(EEE, d MMM yyyy).parse(date);

出于某种原因,这个问题以及许多试图绕过它的尝试都以java.text.ParseException: Unparseable date "2020-09-05" 告终。

我不能从这样的字符串转换日期吗?有没有更好的方法将字符串重新格式化为其他格式?

【问题讨论】:

  • 您发布的代码是无效的 Java。请仔细检查您写的内容。
  • 尝试首先以现有格式解析日期,然后以所需格式输出您将其解析为的日期。在内部,数据结构始终以相同的方式格式化其数据,而您不知道那是什么 - 只有当您告诉数据结构以特定形式输出其数据时才重要。
  • 我建议你不要使用SimpleDateFormatDate。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time APILocalDateDateTimeFormatter

标签: java date


【解决方案1】:

您需要区分解析日期(将String 转换为DateLocalDate 类)和格式化日期(将DateLocalDate 类实例转换为@987654327 @)。

要解析初始字符串,请使用:

LocalDate convertedDate = LocalDate.parse(date)

要格式化convertedDate,请使用:

String formattedDate = convertedDate.format(DateTimeFormatter.ofPattern("EEE, d MMM yyyy"))

编辑:我假设您至少使用 Java 8,因此您可以使用较新的日期/时间类。请参阅https://www.baeldung.com/java-8-date-time-intro 了解更多信息。

【讨论】:

    【解决方案2】:

    您混淆了解析和格式化:您的代码试图解析给定格式的字符串。您是在告诉 Java,您希望日期包含周名称。

    你需要先解析你的日期格式。这会给你一个日期。您接下来需要 format 使用所需格式的日期,这将为您提供 string

    final String dateString = "2020-09-05";
    final Date date = new SimpleDateFormat("y-M-d").parse(dateString);
    final String converted = new SimpleDateFormat("E, d MMM y").format(date);
    

    【讨论】:

      【解决方案3】:

      好的,代码如下:

      String sDate1="1998-12-31";
              DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
              Date date = sdf.parse(sDate1);
       
              System.out.println("EEE, d MMM yyyy formatted date : " + new SimpleDateFormat("EEE, d MMM yyyy").format(date));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        • 2015-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多