É hora da resposta moderna.
java.time e ThreeTenABP
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
String validUntil = "1/1/1990";
LocalDate validDate = LocalDate.parse(validUntil, dateFormatter);
LocalDate currentDate = LocalDate.now(ZoneId.of("Pacific/Efate"));
if (currentDate.isAfter(validDate)) {
System.out.println("Catalog is outdated");
}
Quando executei este código agora, o resultado foi:
Catálogo está desatualizado
Como nunca é a mesma data em todos os fusos horários, forneça um fuso horário explícito a LocalDate.now
. Se você deseja que o catálogo expire ao mesmo tempo em todos os fusos horários, você pode fornecerZoneOffset.UTC
, desde que informe aos usuários que está usando UTC.
Estou usando java.time, a API moderna de data e hora do Java. As classes de data e hora que você usou Calendar
, SimpleDateFormat
e Date
, são todas mal projetadas e, felizmente, há muito desatualizadas. Além disso, apesar do nome, a Date
não representa uma data, mas um ponto no tempo. Uma consequência disso é: embora hoje seja 15 de fevereiro de 2019, um Date
objeto recém-criado já está após (não é igual a) um Date
objeto da análise 15/02/2019
. Isso confunde alguns. Ao contrário disso, o moderno LocalDate
é uma data sem hora do dia (e sem fuso horário), então dois LocalDate
s representando a data de hoje sempre serão iguais.
Pergunta: Posso usar java.time no Android?
Sim, java.time funciona bem em dispositivos Android mais antigos e mais recentes. Requer apenas pelo menos Java 6 .
- No Java 8 e posterior e em dispositivos Android mais recentes (da API de nível 26), a API moderna vem embutida.
- Em Java 6 e 7, obtenha o Backport ThreeTen, o backport das classes modernas (ThreeTen para JSR 310; consulte os links na parte inferior).
- No Android (mais antigo), use a edição Android do ThreeTen Backport. É chamado ThreeTenABP. E certifique-se de importar as classes de data e hora
org.threeten.bp
com subpacotes.
Links
Calendar
,SimpleDateFormat
,Date
ou qualquer um dos outros longas desatualizados data e hora Java classes. Em vez dissojava.time
, use a moderna API Java de data e hora . Sim, você pode usá-lo no Android. Para Android mais antigo, consulte Como usar o ThreeTenABP no projeto Android .