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

How to create a OffsetDateTime in java with format 2023-05-05T06:52:27.954Z [duplicate]

提问人:tictac 提问时间:10/24/2023 最后编辑:deHaartictac 更新时间:10/26/2023 访问量:62

问:

例如,我想生成一个日期,例如这样的格式“2023-05-05T06:52:27.954Z” for 替换为 OffsetDateTime,用于在 Java 中调用需要 OffsetDateTime 的方法 dans 该方法将在仅接受此模式格式的服务器上生成请求 “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 日期 日期格式

评论

2赞 Chaosfire 10/24/2023
我真的不明白你在问什么,但可能你不想在模式中出现。 表示祖鲁语,表示时间以 UTC 为单位。'ZZ
1赞 Anonymous 10/25/2023
不能有格式。但是,请尝试.OffsetDateTimeOffsetDateTime.now(ZoneOffset.UTC) .truncatedTo(ChronoUnit.MILLIS)

答:

1赞 deHaar 10/24/2023 #1

TL的;博士,你的模式是错误的DateTimeFormatter

你有。。。

  • 最后转义,不在要解析的 中,并且 wich 将在每个由此格式化的输出中显示硬编码,而不是真正的偏移量ZStringDateTimeFormatter
  • 模式中没有偏移量或区域,因此不会为祖鲁时间/UTC 或任何其他偏移量生成带有 a 的偏移量StringZ

因此,只需将其替换为(并可能用于一年)...'Z'Xuuuu

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

您可以创建一个 from 值,而不是解析 或调用:OffsetDateTimeStringOffsetDateTime.now()

OffsetDateTime odt = OffsetDateTime.of(2023, 5, 5, 6, 52, 27, 954000000, ZoneOffset.UTC);

有了这个,您可以在没有格式化程序的情况下打印它,甚至可以使用上面的定义,无论如何,你会得到这个:DateTimeFormatter

2023-05-05T06:52:27.954Z

但这只是所包含值的一种表示形式。OffsetDateTime

评论

0赞 tictac 10/24/2023
不,对不起,我需要一个 OffsetDateTime 而不是一个字符串
2赞 deHaar 10/25/2023
具有日期、一天中的时间和与 UTC 的偏移量等值。它没有任何格式,这就是为什么有 s。它们的目的是定义特定的格式,并用于格式化和解析 s。OffsetDateTimeDateTimeFormatterString