【问题标题】:How to get date in a given format?如何以给定格式获取日期?
【发布时间】:2021-09-17 19:52:05
【问题描述】:

这是我想要做的:

  1. 取今天的日期(比如 2021-07-07)
  2. 将其格式化为 (2021-07-07T00:00:00.000Z)
  3. 在 API 中发送

我找不到将2021-07-07 转换为2021-07-07T00:00:00.000Z 的简单方法。我们当然可以附加T00:00:00.000Z 字符串,但我想避免这种情况。

到目前为止,我使用的每种方法(使用 LocalDate、LocalDateTime、Instant、Date)都涉及到时区 (ZoneId) 的一些使用或到 Epoch 的转换,它们最终只会在几秒内而不是毫秒内给出响应。

我相信一定有更简单的方法。

编辑 1: 传递区域 ID 不是问题,我们可以这样做。

【问题讨论】:

  • 您的搜索结果是什么?
  • 您的 API 需要 ISO 8601 格式。根据 ISO 8601 标准,秒和秒的分数是可选的。因此,您很可能只需发送2021-07-07T00:00:00Z 甚至2021-07-07T00:00Z 即可轻松逃脱。
  • @OleV.V.我试过了,但 API 需要 yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 格式的数据。此格式在错误消息中返回。
  • 感谢您的反馈,@bob。那是严格的。那么答案显示如何获得该确切格式是很好的。

标签: java java-8


【解决方案1】:

你需要

LocalDate.now()
    .atStartOfDay(ZoneOffset.UTC)
    .format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX", Locale.ENGLISH))

演示:

import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        System.out.println(
            LocalDate.now()
                .atStartOfDay(ZoneOffset.UTC)
                .format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX", Locale.ENGLISH))
        );
    }
}

ONLINE DEMO

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

【讨论】:

  • 使用DateTimeFormatter.ISO_INSTANT 也会很好用
  • @Aaron - DateTimeFormatter.ISO_INSTANT 不会打印 OP 想要的毫秒部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多