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

如何使用ZonedDateTime将日期字符串格式化为日期和时间?

康文昌
2023-03-14

我有类似“2021-06-01”的字符串,我希望将其转换为“2021-06-01T00:00:00+02:00”。我知道,最简单的解决方案是串接:

date = date+"T00:00:00+02:00";

但是,我希望使用zoneddatetime来实现。目前我的解决方案是:

  public static String formatDate(String date, DateTimeFormatter formatter) {
    return ZonedDateTime.parse(date).format(formatter);
  }

然后使用:

formatDate('2021-06-01', DateTimeFormatter.ISO_LOCAL_DATE);

然而,它抱怨说:

java.time.format.DateTimeParseException: Text '2021-06-01' could not be parsed at index 10

有解决办法吗?

共有1个答案

微生俊健
2023-03-14

您的日期字符串没有时间,也没有区域,因此不能将其解析为zoneddatetime。您还使用了错误的DateTimeFormatter格式化它。iso_local_date生成的格式为yyyy-mm-dd,而不是您想要的格式。

您应该将日期字符串解析为localdate,这只是一个日期,因为该字符串中只有那么多信息。

然后,您应该将时间组件和偏移量组件添加到解析的日期中,然后对其进行格式化:

public static String formatDate(String date) {
    return LocalDate.parse(date)
        .atStartOfDay() // sets the time to 00:00:00
        .atOffset(ZoneOffset.ofHours(2)) // sets the offset to +02:00
        .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); // formats it using the desired format
}

注意,atoffset为您提供了一个offsetdatetime,这对于您想要做的事情已经足够了。如果您真的想使用zoneddatetime,只需将其改为atzone,它也会起作用,但我认为这是不必要的。

 类似资料:
  • 我有一个格式化的字符串日期 2020/04/16 (年/月/日) 我想把这个字符串解析成日期时间 显然不起作用,没有正确的日期格式。 有人知道把这个字符串解析成日期时间的最好方法是什么吗?

  • 问题内容: 我正在使用代码将字符串格式化为日期 但是,如何将日期从格式转换为格式? 问题答案: 使用SimpleDateFormat#format(Date):

  • ObjectMapper不会将对象格式化为自定义对象。 波乔不在我的控制之下,所以我不能改变它。我需要序列化WS的POJO对象。POJO有(我不知道为什么,因为它的日期来自数据库)。 我使用的是Spring boot 2.1.8。释放,所以。。。我将其放入我的依赖项中: 我还在应用程序中添加了这个。特性: 在配置文件中,我在配置文件中添加了这个bean,因为尽快配置ObjectMapper以接受更

  • 问题内容: 我正在尝试将字符串“ 20091229050936”转换为“ 2009年12月29日(UTC)05:09” 给 显然,我犯了一个错误:时间是错误的,它是日期时间对象!它有一个日期 和 一个时间部分! 给 我如何将字符串转换为格式化的日期字符串? 问题答案: 返回一个; 接受作为可选参数: 给

  • 我在presto上,把日期格式化为varchar,看起来像- 我如何转换这个?

  • 我在一个JSON文件中记录一些东西,我有一个datetime对象,我把它转换成一个字符串,这样我就可以在JSON中记录它(它不接受datetime对象)。 我的问题是如何将datetime字符串转换回datetime对象。我知道strptime,我只是不知道什么格式会使它与其他datetime.now对象兼容。 每当我尝试使用strtime时,我都会使用格式,并出现以下错误: 那么,默认datet