La classe Calendar
est maintenant héritée, supplantée en Java par les classes java.time. Pour Android, voir les puces ci-dessous. Pour une valeur de date uniquement sans heure et sans fuseau horaire, utilisez LocalDate
.
LocalDate from = LocalDate.of(year , monthOfYear , dayOfMonth) ;
Pour obtenir une nouvelle valeur basée sur une valeur existante, utilisez un TemporalAdjuster
. La classe TemporalAdjusters
fournit plusieurs implémentations pratiques. Apparemment, vous voulez lastDayOfYear
.
LocalDate to = from.with(TemporalAdjusters.lastDayOfYear()) ;
Pour Java, je suggère le suivi de cette paire de LocalDate
objets en utilisant la classe LocalDateRange
trouvés dans le projet ThreeTen-Extra. Mais ce code n'est pas back-porté sur Android. Vous pourriez vouloir créer votre propre version simple de cette classe pour combiner la paire.
package com.example.javatimestuff;
import org.threeten.bp.Duration;
import org.threeten.bp.LocalDate;
public class DateRange
{
private LocalDate start, stop;
// private Duration duration ; // Cache value if calling `getDuration` frequently.
// private String stringed ; // Cache value if calling `toString` frequently.
public DateRange (LocalDate startArg , LocalDate stopArg)
{
this.start = startArg;
this.stop = stopArg;
}
public LocalDate getStart()
{
return this.start;
}
public LocalDate getStop()
{
return this.stop;
}
public Period toPeriod()
{
Period p = Period.between(this.start , this.stop);
return p;
}
@Override
public String toString()
{
// Per ISO 8601 standard.
// https://en.wikipedia.org/wiki/ISO_8601#Time_intervals
String s = this.start.toString() + "/" + this.stop.toString();
return s;
}
static public LocalDate parse (String input) { // Obviously in real work you would make this safer: check for nulls, check for empty string, check for two parts, catch `DateTimeParseException`.
String[] parts = input.split("/");
LocalDate start = LocalDate.parse(parts[0]) ;
LocalDate stop = LocalDate.parse(parts[1]) ;
DateRange dr = new DateRange(start , stop) ;
return dr ;
}
}
Appelez cette classe par le constructeur.
DateRange dr = new DateRange(from , to) ;
dans un magasin de type List
DateRange
, notre classe personnalisée.
List<DateRange> ranges = new ArrayList<>() ;
ranges.add(dr) ;
Pour le stockage, serialize the List
. Voir: Wikipedia & Oracle Tutorial.
A propos java.time
Le cadre java.time est construit en Java 8 et versions ultérieures. Ces classes supplantent les vieilles classes de date-heure legacy gênantes telles que java.util.Date
, Calendar
, & SimpleDateFormat
. Le projet Joda-Time, maintenant en maintenance mode, conseille la migration vers les classes java.time.
Pour en savoir plus, voir le Oracle Tutorial. Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310.
Où obtenir les classes java.time?
- Java SE 8, Java SE 9, et plus tard
- intégré.
- Partie de l'API Java standard avec une implémentation groupée.
- Java 9 ajoute quelques fonctionnalités et corrections mineures.
- Java SE 6 et Java SE 7
- Une grande partie de la fonctionnalité de java.time est de retour à Java 6 Ported .
- Android
Près double en même nombre d'heures d'auteur à part: [? Comment puis-je vérifier en permanence si les dates sont entrées depuis et vers sont égaux à la date actuelle pour l'année prochaine] (https://stackoverflow.com/ q/46025288/642706) –