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

如何将日期设置为yyyy-MM-dd格式,然后在以后的Java 1.8中以相同的格式打印出来?[副本]

微生信鸿
2023-03-14

在以下代码中:

    ZonedDateTime zdt = ZonedDateTime.now();
    DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    String zdtString = FORMATTER.format(zdt);
    System.out.println(zdtString);

您将看到它以yyyy-DD-mm格式打印出当前日期。由于该问题于2021 7月17日发布,因此打印了:

2021-07-17

但是现在我想把日期改成不同的日期(比如1994-03-24)。

所以我试着:

    DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    ZonedDateTime zdt2 = ZonedDateTime.parse("1994-03-24", FORMATTER);
    String zdtString = FORMATTER.format(zdt2);
    System.out.println(zdtString);

但我得到了以下例外:

Exception in thread "main" java.time.format.DateTimeParseException: Text '1994-03-24' could not be parsed: Unable to obtain ZonedDateTime from TemporalAccessor: {},ISO resolved to 1994-03-24 of type java.time.format.Parsed
    at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855)
    at java.time.ZonedDateTime.parse(ZonedDateTime.java:597)
    at javaapplication5.JavaApplication5.main(JavaApplication5.java:48)
Caused by: java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: {},ISO resolved to 1994-03-24 of type java.time.format.Parsed
    at java.time.ZonedDateTime.from(ZonedDateTime.java:565)
    at java.time.format.Parsed.query(Parsed.java:226)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    ... 2 more
Caused by: java.time.DateTimeException: Unable to obtain ZoneId from TemporalAccessor: {},ISO resolved to 1994-03-24 of type java.time.format.Parsed
    at java.time.ZoneId.from(ZoneId.java:466)
    at java.time.ZonedDateTime.from(ZonedDateTime.java:553)
    ... 4 more

如何将自己的日期设置为当前日期以外的日期?

共有1个答案

晋功
2023-03-14

1994-03-24没有时区信息,因此在您提供时区信息之前,无法将其解析为分区日期时间。此外,您还需要默认时间单位。

1994-03-24可以直接解析为本地日期,因为现代日期时间API基于ISO 8601,只要日期时间字符串符合ISO 8601标准,就不需要显式使用日期时间格式对象。

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        System.out.println(LocalDate.parse("1994-03-24"));
    }
}

输出:

1994-03-24

在线演示

使用默认时间单位和特定时区进行解析的演示:

import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = new DateTimeFormatterBuilder()
                                .appendPattern("u-M-d[ H]")
                                .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)                                
                                .toFormatter(Locale.ENGLISH)
                                .withZone(ZoneId.systemDefault());
                                

        ZonedDateTime zdt = ZonedDateTime.parse("1994-03-24", dtf);
        System.out.println(zdt);
    }
}

输出:

1994-03-24T00:00Z[Europe/London]

在线演示

注:ZoneId。systemDefault()返回JVM的分区ID。将其替换为适用的分区ID,例如分区ID。“美国/纽约”)。此外,请注意方括号内的可选图案,其默认值为0。

从Trail:Date-Time了解更多关于现代日期时间API的信息。

 类似资料:
  • 问题内容: 我有一个日期格式。如何将其转换为使用JavaScript? 上面的代码为我提供了相同的日期格式。我怎样才能解决这个问题? 问题答案: 你可以做: 用法示例: 输出:

  • 问题内容: 我知道JavaScript日期对象中的其他可能格式,但是我没有了解如何格式化日期以进行格式化。 如果您遇到这样的问题,请告诉我。 问题答案: 试试这个 如果要在值<10的前导零,请使用此数字扩展名 应用于先前的代码: [ edit 2019]使用ES20xx,您可以使用模板文字和新的字符串扩展名。

  • 问题内容: 我有一个日期为dd-mm-yyyy格式的日期(在我的数据库内)。我需要将其转换为dd-mm-yy格式。我从db中检索了日期并将其存储在字符串中。 1990并不是完全需要的,只需要90.使用java中的split()我尝试了一些东西,但它不会帮助我。任何人都可以帮忙。任何帮助将不胜感激。 问题答案: 试试下面的代码

  • 问题内容: 好吧,我正在使用a进行详细说明,因为我从数据库中获取了一个对象,并且从同一对象中获得了一个变量“ fecha”(日期),因此我得到了a ,因此formatt以毫秒为单位,但是我不想出现毫秒。因此,我需要将我从数据库中收到的日期格式化为没有毫秒的新日期。 这是对象Factura: 在映射到数据库的xml中,我具有该变量“ fecha”的代码: 在数据库中,该列为。 当我从数据库中获取一个

  • 我刚到爪哇。我想以格式显示日期。当我使用函数打印日期时,它会给我带来我不想要的刺痛。假设我想打印今天的日期,它给我的是,但我想输出为

  • 问题内容: 2012年12月1日星期六00:00:00 GMT 我必须将以上日期转换为以下格式 2012-12-01 我怎样才能? 我已经尝试使用以下方法,但无法正常工作 问题答案: 用这个。 您将获得输出为