Я превращаю комментарий Tunaki в ответ.
TL; др
ChronoUnit.WEEKS.between (
LocalDate.ofEpochDay (0) ,
LocalDate.now(ZoneOffset.UTC)
)
LocalDate
LocalDate
класс представляет собой дату только значение без времени суток и без временной зоны.
Часовой пояс имеет решающее значение для определения даты. В любой данный момент дата изменяется по всему миру по зонам. Например, через несколько минут после полуночи в Париже Франция - новый день, еще «вчера» в Монреале Квебек.
Здесь мы используем UTC как часовой пояс для сегодняшней даты в соответствии с определением эпохи в UTC.
LocalDate today = LocalDate.now(ZoneOffset.UTC);
ChronoUnit
ChronoUnit
класс имеет методы для вычисления истекшего несколько лет или месяцев или недель, или такие. В течение нескольких недель он просто берет количество дней и делит на 7. Таким образом, первый день недели не имеет значения. Не уверен, что это соответствует вашим потребностям или нет, поскольку вопрос неопределен.
LocalDate today = LocalDate.now (ZoneOffset.UTC); // Using UTC to match the definition of the Java epoch.
LocalDate epoch = LocalDate.ofEpochDay (0);
long weeks = ChronoUnit.WEEKS.between (epoch , today);
Дамп для консоли.
System.out.println ("epoch: " + epoch + " | today in UTC: " + today + " | weeks: " + weeks);
эпоха: 1970-01-01 | сегодня в UTC: 2016-08-29 | недель: 2434
Вы можете отрегулировать дату начала в определенный день недели, если это имеет смысл для ваших нужд. Я не уверен, что это подходит, потому что вопрос не ясен.
LocalDate epoch = LocalDate.ofEpochDay (0);
LocalDate start = epoch.with (TemporalAdjusters.nextOrSame (DayOfWeek.SUNDAY)); // Get the first Sunday that *is* the epoch or *follows* the epoch.
long weeks = ChronoUnit.WEEKS.between (start , today);
Я может быть что-то не хватает, но это не так просто 'ChronoUnit.WEEKS.between (LocalDate.ofEpochDay (0), LocalDate)'? – Tunaki