如何在java中创建格式为2023-05-05T06:52:27.954Z的OffsetDateTime

问题描述 投票:0回答:1

我现在想生成一个日期,格式为“2023-05-05T06:52:27.954Z” 用于使用 OffsetDateTime,用于调用 Java 中需要 OffsetDateTime 的方法 但该方法将在仅接受此模式“2023-05-05T06:52:27.954Z”格式的服务器上生成请求 你知道这样做的方法吗?生成的错误是:

expected format Value(Year,4,10,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)'T'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)Fraction(MilliOfSecond,3,3,DecimalPoint)'Z'"<EOL>}"

我尝试过,但无能为力:

String dateStr = ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
OffsetDateTime maintenant = OffsetDateTime.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));

非常感谢并致以诚挚的问候

java date date-format
1个回答
0
投票

tl;dr 你的
DateTimeFormatter
中的模式是错误的

你有……

  • 末尾有一个转义的
    Z
    ,它不在要解析的
    String
  • 图案中没有偏移或区域,因此不会产生
    String
    以及祖鲁时间 / UTC 的
    Z

因此将

'Z'
替换为
X

public static void main(String[] args) {
    try {
    // get "now" in UTC
    OffsetDateTime maintenant = OffsetDateTime.now(ZoneOffset.UTC);
    // print it formatted implicitly (toString)
    System.out.println(maintenant);
    // define a formatter for your desired format
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX");
    // print the OffsetDateTime formatted as desired
    System.out.println(maintenant.format(dtf));
}

输出(几秒钟前):

2023-10-24T13:56:42.954882Z
2023-10-24T13:56:42.954Z
© www.soinside.com 2019 - 2024. All rights reserved.