Eu tenho a seguinte seqüência: String timeStamp = "2020-01-31 12:13:14 +03:00"
. E eu tentei analisá-lo usando Java 8 DateTimeFormatter.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( format );
tmpTimestamp = ZonedDateTime.parse( timeStamp, formatter );
em que format
é um dos seguintes:
"yyyy-MM-dd' 'HH:mm:ss' 'Z",
"yyyy-MM-dd' 'HH:mm:ss' 'X",
"yyyy-MM-dd' 'HH:mm:ss' 'x",
"yyyy-MM-dd HH:mm:ss Z",
"yyyy-MM-dd HH:mm:ss X",
"yyyy-MM-dd HH:mm:ss x",
Nenhum está funcionando. Sempre eu tenho DateTimeParseException
tanto apontando para '+' ou ':' personagem em compensar substring "+03: 00"
De acordo com JavaDocs: Classe DateTimeFormatter "+03: 00" deve ser suportado por qualquer um: Z
, X
e x
.
Então a questão é como construir formatador string para analisá-lo?
Você deve usar os tempos X
( yyyy-MM-dd HH:mm:ss XXX
):
String timeStamp = "2020-01-31 12:13:14 +03:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss XXX");
ZonedDateTime tmpTimestamp = ZonedDateTime.parse(timeStamp, formatter);
A partir dos documentos :
Deslocamento X e x: Este formatos a compensação com base no número de cartas padrão.
Uma letra saídas apenas a hora, como '+01', a menos que o minuto é diferente de zero caso em que o minuto é também de saída, como '0130'.
Duas cartas produz a hora e os minutos, sem uma vírgula, como '0130'.
Três letras emite a hora e minuto, com um cólon, tais como '01: 30'.
Quatro cartas produz a hora e minuto e segundo opcional, sem uma vírgula, como '013015'.
Cinco cartas emite a hora e minuto e segundo opcional, com uma cólon, tais como '01: 30: 15'.
Seis ou mais letras joga IllegalArgumentException.
carta padrão de 'X' (em maiúsculas) output 'Z', quando o deslocamento para ser saída seria zero, ao passo que carta padrão 'x' (minúscula) output '00', '0000', ou '00 : 00' .
Alternativa você pode usar cinco letras ( XXXXX
) e você também pode usar ZZZ
ou ZZZZZ
em vez de XXX
ou XXXXX
.