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

如何使用LocalDateTime解析/格式化日期?(Java8)

张坚白
2023-03-14

Java 8 添加了一个新的 java.time API 来处理日期和时间 (JSR 310)。

我有字符串形式的日期和时间(例如< code >“2014-04-08 12:30”)。如何从给定的字符串中获取< code>LocalDateTime实例?

在我完成LocalDateTime对象的工作后:如何将LocalDateTime实例转换回与上述格式相同的字符串?

共有3个答案

令狐阳秋
2023-03-14

Sufiyan Ghori和micha的回答都很好地解释了有关字符串模式的问题。但是,如果您使用ISO 8601,则不需要应用DateTimeFor的,因为LocalDateTime已经为此做好了准备:

将LocalDateTime转换为时区ISO

LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ldt.atZone(ZoneOffset.UTC); // You might use a different zone
String iso8601 = zdt.toString();

从 ISO8601 字符串转换回本地日期时间

String iso8601 = "2016-02-14T18:32:04.150Z";
ZonedDateTime zdt = ZonedDateTime.parse(iso8601);
LocalDateTime ldt = zdt.toLocalDateTime();
蒯安平
2023-03-14

您也可以使用LocalDate.parse()LocalDateTime.parse()String不提供模式,如果String在ISO中

例如

String strDate = "2015-08-04";
LocalDate aLD = LocalDate.parse(strDate);
System.out.println("Date: " + aLD);

String strDatewithTime = "2015-08-04T10:11:30";
LocalDateTime aLDT = LocalDateTime.parse(strDatewithTime);
System.out.println("Date with Time: " + aLDT);

输出

Date: 2015-08-04
Date with Time: 2015-08-04T10:11:30

并且仅在必须处理其他日期模式时才使用日期时间格式化程序

例如,在以下示例中,dd MMM uuuu表示月日(两位数)、月份名称的三个字母(Jan、Feb、Mar、…)和四位数年份:

DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd MMM uuuu");
String anotherDate = "04 Aug 2015";
LocalDate lds = LocalDate.parse(anotherDate, dTF);
System.out.println(anotherDate + " parses to " + lds);

输出

04 Aug 2015 parses to 2015-08-04

还要记住,< code>DateTimeFormatter对象是双向的;它既可以解析输入,也可以格式化输出。

String strDate = "2015-08-04";
LocalDate aLD = LocalDate.parse(strDate);
DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd MMM uuuu");
System.out.println(aLD + " formats as " + dTF.format(aLD));

输出

2015-08-04 formats as 04 Aug 2015

(请参阅格式化和分析日期格式化程序的模式的完整列表。

  Symbol  Meaning                     Presentation      Examples
  ------  -------                     ------------      -------
   G       era                         text              AD; Anno Domini; A
   u       year                        year              2004; 04
   y       year-of-era                 year              2004; 04
   D       day-of-year                 number            189
   M/L     month-of-year               number/text       7; 07; Jul; July; J
   d       day-of-month                number            10

   Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
   Y       week-based-year             year              1996; 96
   w       week-of-week-based-year     number            27
   W       week-of-month               number            4
   E       day-of-week                 text              Tue; Tuesday; T
   e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
   F       week-of-month               number            3

   a       am-pm-of-day                text              PM
   h       clock-hour-of-am-pm (1-12)  number            12
   K       hour-of-am-pm (0-11)        number            0
   k       clock-hour-of-am-pm (1-24)  number            0

   H       hour-of-day (0-23)          number            0
   m       minute-of-hour              number            30
   s       second-of-minute            number            55
   S       fraction-of-second          fraction          978
   A       milli-of-day                number            1234
   n       nano-of-second              number            987654321
   N       nano-of-day                 number            1234000000

   V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
   z       time-zone name              zone-name         Pacific Standard Time; PST
   O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
   X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
   x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
   Z       zone-offset                 offset-Z          +0000; -0800; -08:00;

   p       pad next                    pad modifier      1

   '       escape for text             delimiter
   ''      single quote                literal           '
   [       optional section start
   ]       optional section end
   #       reserved for future use
   {       reserved for future use
   }       reserved for future use
翟俊茂
2023-03-14

分析日期和时间

若要从字符串创建< code>LocalDateTime对象,可以使用静态< code > local datetime . parse()方法。它接受一个字符串和一个< code>DateTimeFormatter作为参数。< code>DateTimeFormatter用于指定日期/时间模式。

String str = "1986-04-08 12:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);

设置日期和时间的格式

要从LocalDateTime对象创建格式化字符串,可以使用format()方法。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.of(1986, Month.APRIL, 8, 12, 30);
String formattedDateTime = dateTime.format(formatter); // "1986-04-08 12:30"

请注意,有一些常用的日期/时间格式在< code>DateTimeFormatter中预定义为常量。例如:使用< code>DateTimeFormatter。ISO_DATE_TIME格式化上面的< code>LocalDateTime实例将产生字符串< code >“1986-04-08t 12:30:00”。

parse() 和 format() 方法可用于所有与日期/时间相关的对象(例如 LocalDateZonedDateTime

 类似资料:
  • 问题内容: Java 8添加了新的java.time API,用于处理日期和时间(JSR 310)。 我将日期和时间作为字符串(例如)。如何从给定的字符串中获取实例? 处理完对象后:如何将实例转换回具有上述格式的字符串? 问题答案: 解析日期和时间 要从字符串创建对象,可以使用方法。它使用字符串和作为参数。所述用于指定的日期/时间模式。 格式化日期和时间 要创建对象的格式化字符串,可以使用方法。

  • 我正在尝试将存储在mongoDb中的Javascript日期转换为Java LocalDateTime ISO\u Date\u TIME,并且我一直遇到ParseException,我不知道为什么我的代码会出错。首先,代码: 解析器: 传递的日期格式为“2021 10月7日星期四21:29:36 GMT 0000(协调世界时)” 我收到的错误是: getUserById()中的异常,原因='ja

  • 我正在研究spring-boot和gradle,以创建一个rest服务。现在我需要将json日期格式设置为“yyyy-MM-dd”,即格式应为dateOfBirth:“16-03-2015”,但我得到的是“dateOfBirth:-751181400000”。我在我的应用程序中添加了以下代码。java类,但仍然无法获得所需的输出。 和应用程序.java: 请帮我解决这个问题。

  • 问题内容: 我有一个输入定义为 将其显示在页面的其他位置: 当页面加载时,出生日期的格式很好,类似于。但是,当我查看我的内部时,它显示为我猜想的是JS如何将对象呈现为字符串。 首先,我如何告诉Angular将日期显示为?我似乎无法在属性内应用。 其次,一旦我编辑了日期,即使将其保留为原始格式,我的其他文本(位于中)似乎也不再应用过滤器;它突然更改了格式以匹配输入文本框的格式。如何在每次模型更改时应

  • 我正在尝试将DatePicker日期格式化为简单的数据格式(“yyyy-MM-dd HH: mm: ss Z”)。有人告诉我,我需要使用简单的数据格式将其解析为日期对象-简单的数据格式(“yyyy-MM-dd”),然后将其格式化为我需要的内容,如下所示。但是,我在尝试捕捉块中收到错误“重复局部变量eDate”。任何专家都可以查看我的代码并提出建议吗? 已更新

  • 我想以yyyy-mm-dd格式存储今天的日期。在存储之前,我将今天的日期格式化,并再次解析格式化后的字符串。它以不同于我想要的格式给出了输出日期。我如何获得日期,将其格式化为' yyyy-mm-dd '并再次将其转换为日期,并希望输出格式为' yyyy-mm-dd '。请找到下面的代码,告诉我哪里错了 我得到的上述代码的输出是星期四 Mar 07 00:00:00 GMT 2013.但我希望输出为