web-dev-qa-db-fra.com

Obtenez le nombre de jours, semaines et mois depuis Epoch en Java

J'essaie d'obtenir le nombre de jours, semaines, mois depuis Epoch en Java.

La classe Java Calendar propose des choses comme calendar.get (GregorianCalendar.DAY_OF_YEAR) ou Calendar.get (GregorianCalendar.WEEK_OF_YEAR), ce qui est un bon début mais ne fait pas exactement ce dont j'ai besoin .

Existe-t-il une manière élégante de le faire en Java?

27
Ariel Vardi

Vous pouvez utiliser la bibliothèque Joda Time pour le faire assez facilement - je l'utilise pour tout ce qui concerne le temps autre que l'utilisation des classes standard Java Date et Calendar. Jetez un œil dans l'exemple ci-dessous en utilisant la bibliothèque:

MutableDateTime Epoch = new MutableDateTime();
Epoch.setDate(0); //Set to Epoch time
DateTime now = new DateTime();

Days days = Days.daysBetween(Epoch, now);
Weeks weeks = Weeks.weeksBetween(Epoch, now);
Months months = Months.monthsBetween(Epoch, now);

System.out.println("Days Since Epoch: " + days.getDays());
System.out.println("Weeks Since Epoch: " + weeks.getWeeks());
System.out.println("Months Since Epoch: " + months.getMonths());

Lorsque je lance ceci, j'obtiens la sortie suivante:

Days Since Epoch: 15122
Weeks Since Epoch: 2160
Months Since Epoch: 496
35
bamana

Java.time

Utilisez les classes Java.time intégrées à Java 8 et versions ultérieures.

LocalDate now = LocalDate.now();
LocalDate Epoch = LocalDate.ofEpochDay(0);

System.out.println("Days: " + ChronoUnit.DAYS.between(Epoch, now));
System.out.println("Weeks: " + ChronoUnit.WEEKS.between(Epoch, now));
System.out.println("Months: " + ChronoUnit.MONTHS.between(Epoch, now));

Sortie

Days: 16857
Weeks: 2408
Months: 553
21
softarn
Long currentMilli = System.currentTimeMillis();
Long seconds = currentMilli / 1000;
Long minutes = seconds / 60;
Long hours = minutes / 60;
Long days = hours / 24;
System.out.println("Days since Epoch : "  + days);

ou

System.out.println("Days since Epoch : "  + ((int) currentMilli / 86400000));
9
ferronrsmith

Je suis un peu surpris que presque toutes les réponses calculent réellement les jours entre Epoch et now. Avec Java.time.LocalDate c'est aussi simple que:

LocalDate.now().toEpochDay()
3
mindex

Date.getTime() - Retourne le nombre de millisecondes depuis le 1er janvier 1970, 00:00:00 GMT représenté par cet objet Date.

Vous pouvez l'utiliser et connaître le nombre de millisecondes dans les intervalles qui vous intéressent pour effectuer les calculs.

0
unholysampler
Calendar now = Calendar.getInstance();
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(0); // start at Epoch

int days = 0
while (cal.getTimeInMillis() < now.getTimeInMillis()) {
  days += 1
  cal.add(Calendar.DAY_OF_MONTH, 1) // increment one day at a time
}
System.out.println("Days since Epoch = " + days);
0
Binil Thomas

Je ne m'attendrais pas à ce qu'il y ait une façon élégante de le faire car ce n'est pas une exigence très courante. Je ne peux pas m'empêcher de me demander pourquoi vous voulez le faire ...

Mais de toute façon, la façon dont je le ferais est de soustraire la date Epoch du Calendar puis d'obtenir les champs que vous voulez:

Calendar timeSinceEpoch = Calendar.getInstance();
timeSinceEpoch.add(Calendar.YEAR, -1970);

int yearsSinceEpoch = timeSinceEpoch.get(Calendar.YEAR);
int monthsSinceEpoch = timeSinceEpoch.get(Calendar.MONTH) + 12 * yearsSinceEpoch;
0