String para Instant

2 respostas
fabiomarcilio

Boa tarde Pessoal, estou trabalhando em um projeto que preciso ler a data que esta dentro de um arquivo txt e transformar no tipo Instant para fazer comparação com a data atual, não estou conseguindo transformar a String lida do arquivo para esse formato Instant, alguém tem uma ideia? Desde já muito obrigado! Segue o código abaixo:

try {

arq = new File(Environment.getExternalStorageDirectory(),arquivo);

BufferedReader br = new BufferedReader(new FileReader(arq));

// efetua uma leitura linha a linha do arquivo a carrega

// a caixa de texto com a informação lida

while ((arquivo = br.readLine()) != null) {

//nessa parte está a minha dúvida

//preciso transformar a variável arquivo que é o retorno

// do txt em String para o formato Instant

dataArquivo = Instant.parse(arquivo);

}

br.close();

//mensagemExibir(Atenção!, Leitura do arquivo efetuada com sucesso!);

} catch (Exception e) {

//	mensagemExibir(Arquivo não encontrado, “” + e);

}

Instant dataAtual = Instant.now();

long days = ChronoUnit.DAYS.between( dataArquivo, dataAtual );

2 Respostas

FelipeTorres

Para você converter uma string num Instant, de acordo com o javadoc do método parse, você precisa passar uma string no formato reconhecido pelo método dateTimeParser, que segue o seguinte formato:

datetime          = time | date-opt-time
 time              = 'T' time-element [offset]
 date-opt-time     = date-element ['T' [time-element] [offset]]
 date-element      = std-date-element | ord-date-element | week-date-element
 std-date-element  = yyyy ['-' MM ['-' dd]]
 ord-date-element  = yyyy ['-' DDD]
 week-date-element = xxxx '-W' ww ['-' e]
 time-element      = HH [minute-element] | [fraction]
 minute-element    = ':' mm [second-element] | [fraction]
 second-element    = ':' ss [fraction]
 fraction          = ('.' | ',') digit+
 offset            = 'Z' | (('+' | '-') HH [':' mm [':' ss [('.' | ',') SSS]]])

Lendo com calma a sintaxe acima podemos construir a seguinte string válida para o parse:

2016-02-15T17:47:58.257+08:00

Pois:

datetime          = 2016-02-15T17:47:58.257+08:00
 date-opt-time     = 2016-02-15 [T [17:47:58.257] [+08:00]]
 date-element      = 2016-02-15
 std-date-element  = 2016 [- 02 [-15]]
 time-element      = 17 [:47:58.257]
 minute-element    = ':' 47 [:58.257]
 second-element    = ':' 58 [.257]
 fraction          = .257
 offset            = (('+') 08 [':' 00 ])

Abraço.

fabiomarcilio

Felipe Torres, muito obrigado pela explicação, entendi como fazer, mas é que eu já consegui fazer no braço usando Date. Em uma próxima com certeza vou voltar a tentar utilizar desse modo!

Criado 13 de fevereiro de 2016
Ultima resposta 16 de fev. de 2016
Respostas 2
Participantes 2