Подтвердить что ты не робот

Получите количество дней, недель и месяцев, так как Epoch в Java

Я пытаюсь получить количество дней, недель, месяцев с Epoch в Java.

Класс Java Calendar предлагает такие вещи, как calendar.get(GregorianCalendar.DAY_OF_YEAR) или Calendar.get(GregorianCalendar.WEEK_OF_YEAR), который является хорошим началом, но он не делает именно то, что мне нужно.

Есть ли элегантный способ сделать это в Java?

4b9b3361

Ответ 1

Вы можете использовать Joda Time library, чтобы сделать это довольно легко - я использую его в любое время, отличное от использования стандартной даты Java и Классы календаря. Взгляните на приведенный ниже пример с помощью библиотеки:

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

Когда я запускаю это, я получаю следующий вывод:

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

Ответ 2

java.time

Используйте классы java.time, встроенные в Java 8 и более поздние версии.

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));

Выход

Days: 16857
Weeks: 2408
Months: 553

Ответ 3

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);

или

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

Ответ 4

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);

Ответ 5

Date.getTime() - Возвращает количество миллисекунд с 1 января 1970 года, 00:00:00 GMT, представленное этим объектом Date.

Вы можете использовать это и знать, сколько миллисекунд находится в промежутках, которые вам нужны для выполнения вычислений.

Ответ 6

Я бы не ожидал, что там будет элегантный способ сделать это, поскольку это не очень распространенное требование. Я не могу не задаться вопросом, почему вы хотите это сделать...

Но в любом случае способ, которым я это сделаю, - вычесть дату эпохи из Calendar, а затем получить нужные вам поля:

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

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