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?
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
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
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));
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()
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.
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);
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;