una - Obtenga el número de días, semanas y meses, desde Epoch en Java
como calcular la edad en jframe (7)
java.time
Utilice las clases java.time integradas en Java 8 y posteriores.
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));
Salida
Days: 16857
Weeks: 2408
Months: 553
Estoy tratando de obtener el número de días, semanas, meses desde la época en Java.
La clase de Calendario Java ofrece cosas como calendar.get (GregorianCalendar.DAY_OF_YEAR), o Calendar.get (GregorianCalendar.WEEK_OF_YEAR), que es un buen comienzo pero no hace exactamente lo que necesito.
¿Hay una manera elegante de hacer esto en Java?
Me sorprende que casi todas las respuestas sean en realidad días calculados entre la epoch
y now
. Con java.time.LocalDate
es tan simple como:
LocalDate.now().toEpochDay()
No esperaría que hubiera una manera elegante de hacerlo ya que no es un requisito muy común. No puedo evitar preguntarme por qué quieres hacerlo ...
Pero de todos modos, la forma en que lo haría es restar la fecha de la época del Calendar
y luego obtener los campos que desee:
Calendar timeSinceEpoch = Calendar.getInstance();
timeSinceEpoch.add(Calendar.YEAR, -1970);
int yearsSinceEpoch = timeSinceEpoch.get(Calendar.YEAR);
int monthsSinceEpoch = timeSinceEpoch.get(Calendar.MONTH) + 12 * yearsSinceEpoch;
Puede usar la biblioteca de Joda Time para hacer esto con bastante facilidad; lo uso para cualquier cosa relacionada con el tiempo que no sea la de las clases estándar de fecha y calendario de Java. Eche un vistazo al siguiente ejemplo utilizando la biblioteca:
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());
Cuando ejecuto esto obtengo el siguiente resultado:
Days Since Epoch: 15122
Weeks Since Epoch: 2160
Months Since Epoch: 496
Date.getTime()
: devuelve el número de milisegundos desde el 1 de enero de 1970, 00:00:00 GMT representado por este objeto Date.
Puede usar esto y saber cuántos milisegundos hay en los intervalos que le interesan para realizar los cálculos.
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);
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);
o
System.out.println("Days since epoch : " + ((int) currentMilli / 86400000));