Como trabalhar com esse formato de data

Boa Noite Pessoal,

Tenho esse formato de data abaixo:

2020-08-02T08:57:00.000+0200

Minha intenção é adicionar apenas um dia à essa data, no caso ficaria assim:

2020-08-03T08:57:00.000+0200

Alguém poderia me dá uma luz?

isso é um timestamp with timezone

Vc pode converter isso pra Date e alterar:

long timestamp = 5607059900000;
Timestamp stamp = new Timestamp(timestamp);
Date date = new Date(stamp.getTime());
System.out.println(date);
//eai pega o dia usando o calendar

Caso vc recupere isso como String, pode fazer o mais chato:

String timestamp = "2020-08-02T08:57:00.000+0200".split("T")[0];
//output: 2020-08-02
String dia = timestamp.split("-")[2];
System.out.println(dia);
//output: 02

@rodriguesabner Não seria melhor usar o pacote java.time nesses casos?

Cara, eu não sei não, o time aceita timestamp? Eu sempre usei a primeira opção quando recuperava timestamp

Não sei também se aceita, só pensei que fosse melhor utilizar uma API mais recente para trabalhar com Datas, vou dar uma olhada aqui e edito esse post.

Acho que se tratando de bibliotecas terceiras o mais aconselhável é a JodaTime, aí sim é sucesso.

O java.time eu nunca usei muito não

O máximo que consegui fazer foi dessa maneira, porém tive que remover o T e o .0200, esse tipo de data parece que é complicado trabalhar!

String s = "2020-08-02 08:57:00.000";
LocalDateTime ldt = LocalDateTime.parse(s, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
ldt = ldt.plusDays(1); //adiciona 1 dia
System.out.println(ldt);

O melhor que consegui fazer foi isso graças ao exemplo do @rodriguesabner :
@jbdj2006 Espero que te ajude de alguma forma!

String s = "2020-08-02T08:57:00.000+0200";
StringBuilder sb = new StringBuilder();
sb.append(s);
LocalDate ldt = LocalDate.parse(s.split("T")[0], DateTimeFormatter.ofPattern("yyyy-MM-dd"));
ldt = ldt.plusDays(1); //adiciona 1 dia
sb.replace(0, ldt.toString().length(), ldt.toString());
System.out.println(sb); //O resultado é 2020-08-03T08:57:00.000+0200

Esta data tem informação

2020-08-02T08:57:00.000+0200
Ano-Mes-DiaTHora:Minuto:Segundo.Milissegundos+OffsetTimezone

Para pegar toda a informação, você deve utilizar OffsetTimezone. Uma explicação muito boa está aqui

Daí você faria

OffsetDateTime data = OffsetDateTime.parse("2020-08-02T08:57:00.000+0200"); 
System.out.println("Data: " + data.plusDays(1)); 

Referências:

2 curtidas

@SrMouraSilva, essa solução deu erro:

OffsetDateTime data = OffsetDateTime.parse("2020-08-02T08:57:00.000+0200"); 
System.out.println("Data: " + data.plusDays(1));

Consegui fazer com a solução do @WillianC19:

String s = "2020-08-02T08:57:00.000+0200";
StringBuilder sb = new StringBuilder();
sb.append(s);
LocalDate ldt = LocalDate.parse(s.split("T")[0], DateTimeFormatter.ofPattern("yyyy-MM-dd"));
ldt = ldt.plusDays(1); //adiciona 1 dia
sb.replace(0, ldt.toString().length(), ldt.toString());
System.out.println(sb); //O resultado é 2020-08-03T08:57:00.000+0200

Muito obrigado pessoal pela grande ajuda.

Acho que o padrão correto para iso date time com offset é assim:

2020-08-02T08:57:00.000+02:00

tem um : no offset. Com isso, essa solução vai funcionar:

OffsetDateTime data = OffsetDateTime.parse("2020-08-02T08:57:00.000+02:00");

FONTE: https://www.w3.org/TR/NOTE-datetime