提问人:tictac 提问时间:10/24/2023 最后编辑:deHaartictac 更新时间:10/26/2023 访问量:62
如何在 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]
问:
例如,我想生成一个日期,例如这样的格式“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'"));
非常感谢,并致以最诚挚的问候
答:
1赞
deHaar
10/24/2023
#1
TL的;博士,你的模式是错误的DateTimeFormatter
你有。。。
- 最后转义,不在要解析的 中,并且 wich 将在每个由此格式化的输出中显示硬编码,而不是真正的偏移量
Z
String
DateTimeFormatter
- 模式中没有偏移量或区域,因此不会为祖鲁时间/UTC 或任何其他偏移量生成带有 a 的偏移量
String
Z
因此,只需将其替换为(并可能用于一年)...'Z'
X
uuuu
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 值,而不是解析 或调用:OffsetDateTime
String
OffsetDateTime.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。OffsetDateTime
DateTimeFormatter
String
评论
'
Z
Z
OffsetDateTime
OffsetDateTime.now(ZoneOffset.UTC) .truncatedTo(ChronoUnit.MILLIS)