web-dev-qa-db-fra.com

Avons-nous une sorte de classe TimeSpan dans Java

Je me demandais simplement s'il y avait un besoin de TimeSpan dans Java.util pour que je puisse définir le nombre d'heures, de minutes et de secondes entre ces deux heures.

A partir de cette TimeSpan nous pouvons avoir un intervalle de temps entre deux fois. comme

TimeSpan getTimeSpan( Date before, Date after ){...}

ou

long timeSpan = System.currentTimeMillis();
// ... long job
timeSpan = System.currentTimeMillis() - timeSpan;

TimeSpan ts = new TimeSpan(timeSpan);

et avec ce TimeSpan nous pouvons l'utiliser dans SimpleDateFormat.

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
format.format( timsSpan );

Je ne sais pas si cela a déjà été implémenté dans Java mais pas encore découvert par moi.

47
Talha Ahmed Khan

Avec JDK 8, les bibliothèques date-heure du SDK ont été enrichies et vous pouvez utiliser

Duration ou Period

Interval de JodaTime fera l'affaire ..

Un intervalle de temps représente une période de temps entre deux instants. Les intervalles incluent le début et la fin. L'instant de fin est toujours supérieur ou égal à l'instant de début.

Les intervalles ont une durée fixe en millisecondes. C'est la différence entre les instants de début et de fin. La durée est représentée séparément par ReadableDuration. Par conséquent, les intervalles ne sont pas comparables. Pour comparer la longueur de deux intervalles, vous devez comparer leurs durées.

Un intervalle peut également être converti en ReadablePeriod. Cela représente la différence entre les points de début et de fin en termes de champs tels que les années et les jours.

L'intervalle est thread-safe et immuable.

30
Jigar Joshi

Dans Java 8, une bibliothèque de temps appropriée a été ajoutée à l'API standard (elle est fortement basée sur JodaTime).

Il contient deux classes que vous pouvez utiliser pour indiquer une période:

  1. Duration qui indique une durée en secondes ou en nanosecondes d'un intervalle de temps.
  2. Period qui indique une différence plus conviviale, stockée comme 'x années et y mois, etc.'.

Une explication détaillée de la différence entre eux peut être trouvée dans le Tutoriel Java

26
Thirler

Si vous êtes sur Java 8 (ou supérieur) ou si vous ne voulez tout simplement pas importer JodaTime (l'auteur de JodaTime lui-même suggérer de migrer vers Java.time) : Java 8 offre cette fonctionnalité avec Périodes , voir ici pour un tutoriel: https://docs.Oracle.com/javase/tutorial/datetime /iso/period.html

Permettez-moi de citer le tutoriel Oracle ici:

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);

Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() +
                   " months, and " + p.getDays() +
                   " days old. (" + p2 + " days total)");

Le code produit une sortie similaire à la suivante:

You are 53 years, 4 months, and 29 days old. (19508 days total)
3
Anton Kaiser

Si vous recherchez une version plus légère alternative, jetez un œil à cette bibliothèque que j'ai écrite pour utiliser dans ma propre application Android. https://github.com/ashokgelal/ samaya

Désolé, je n'ai aucune documentation sur son utilisation, mais elle est très similaire à la classe homologue .net Timespan. En outre, il existe des tests unitaires qui contiennent de nombreux exemples sur la façon de l'utiliser.

1
ashokgelal