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

Java短日期字符串转换为ZonedDateTime[重复]

谭云瀚
2023-03-14

我有一个String,日期格式为:2021-10-05。需要将此String转换为ZonedDateTime类型。尝试以这种方式执行,但无法解析Text。时间可以是00:00:00。有什么建议吗?

public static final ZoneId ZONE_ID = ZoneId.of("UTC");

ZonedDateTime dt2 = ZonedDateTime.parse(date, //date String = 2021-10-05
DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZONE_ID));

共有2个答案

阴永逸
2023-03-14

现代日期时间API基于ISO 8601,只要日期时间字符串符合ISO 8601标准,就不需要显式使用DateTimeFormatter对象。

由于您的日期字符串已经是ISO 8601格式,您可以简单地将其解析为本地日期,而无需使用日期时间格式,然后可以使用atStartOfDay(ZoneId)将解析后的值转换为分区日期时间(ZonedDateTime)。

演示:

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        ZonedDateTime zdt = LocalDate.parse("2021-10-05").atStartOfDay(ZoneId.of("UTC"));
        System.out.println(zdt);
    }
}

输出:

2021-10-05T00:00Z[UTC]

在线演示

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

如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查通过desugaring提供的Java 8 API。注意,Android 8.0 Oreo已经提供了对java的支持。时间

车靖琪
2023-03-14

由于给定字符串中没有时间进行解析,因此必须首先使用LocalDate转换:

LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
ZonedDateTime dt2 = ZonedDateTime.of(localDate, LocalTime.MIDNIGHT, ZONE_ID);

或者以更优雅的方式发布在评论中:

LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
ZonedDateTime dt2 = localDate.atStartOfDay(ZONE_ID);
 类似资料:
  • 我有一个,其日期格式为:。需要将此转换为类型。试图用这种方法来做,但无法解析文本。时间可以是00:00:00。有什么建议吗?

  • 我的一个软件中有这段代码,我简化了它,并在一个示例java类中重写了它。今天是“2022-04-08”,当我执行此代码时,变量等于,但它应该是。如何解决这个问题?

  • 我有以下代码段来更改日期格式 用相同的日期格式将字符串再次转换回日期的最佳方法是什么

  • 问题内容: 该java.util.Date 方法显示当地时区的日期。 在几种常见的情况下,我们希望以UTC格式打印数据,包括日志,数据导出以及与外部程序的通信。 在UTC中创建String表示形式的最佳方法是什么? 如何用更好的格式替换无法排序的juDate 格式(感谢@JonSkeet!)? 附录 我认为以自定义格式和时区打印日期的标准方法非常繁琐: 我一直在寻找像这样的单线: 问题答案: 遵循

  • 问题内容: 我需要有关此java方法的一些建议。此方法的目的是采用表示日期的字符串-该字符串是从EST时区中的日期创建的-并将其转换为UTC时区中的java Date对象。 我看到的问题是dt的值似乎已关闭。例如,如果dateString为‘10 / 16/2012 12:06 PM’-我期望dt(以UTC为单位)的值类似于“ 2012年10月16日,星期二,下午4:06”。取而代之的是,dt的值

  • 我需要将一些字符串日期转换为另一种格式的字符串日期 我想按照“yyyy-MM-dd'T'HH:MM:ss.SSSXX”模式获得ISO-8601格式的结果日期字符串 你能帮我实现这个吗?