Data e hora do Java 8: analise a string ISO 8601 sem dois pontos no deslocamento [duplicado]
Esta pergunta já tem uma resposta aqui:
Não é possível analisar String no formato ISO 8601, sem dois pontos no deslocamento, para Java 8 Date 1 respostaTentamos analisar a seguinte string ISO 8601 DateTime com deslocamento de fuso horário:
final String input = "2022-03-17T23:00:00.000+0000";
OffsetDateTime.parse(input);
LocalDateTime.parse(input, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
Ambas as abordagens falham (o que faz sentidoOffsetDateTime
use também oDateTimeFormatter.ISO_OFFSET_DATE_TIME
) por causa dos dois pontos no deslocamento do fuso horário.
java.time.format.DateTimeParseException: o texto '2022-03-17T23: 00: 00.000 + 0000' não pôde ser analisado no índice 23
Mas de acordo comWikipedia existem 4 formatos válidos para um deslocamento de fuso horário:
<time>Z
<time>±hh:mm
<time>±hhmm
<time>±hh
Outras estruturas / idiomas podem analisar essa sequência sem problemas, por exemplo o JavascriptDate()
ou JacksonsISO8601Utils
(eles discutem esse problemaaqui)
Agora poderíamos escrever nossos própriosDateTimeFormatter
com um RegEx complexo, mas na minha opinião ojava.time
A biblioteca deve poder analisar essa sequência ISO 8601 válida por padrão, pois é uma sequência válida.
Por enquanto, usamos JacksonsISO8601DateFormat
, mas preferimos usar o funcionáriodate.time
biblioteca para trabalhar. Qual seria a sua abordagem para resolver esse problema?