Ich mache den Kommentar von Tunaki zu einer Antwort.
tl; dr
ChronoUnit.WEEKS.between (
LocalDate.ofEpochDay (0) ,
LocalDate.now(ZoneOffset.UTC)
)
LocalDate
Die LocalDate
Klasse repräsentiert ein Datum Wert nur ohne Zeit-of-Tag und ohne Zeitzone.
Eine Zeitzone ist entscheidend für die Bestimmung eines Datums. Für jeden Moment variiert das Datum von Zone zu Zone. Zum Beispiel, ein paar Minuten nach Mitternacht in Paris Frankreich ist ein neuer Tag noch "gestern" in Montréal Québec.
Hier verwenden wir UTC als Zeitzone für das heutige Datum, in Übereinstimmung mit der Epoche in UTC definiert.
LocalDate today = LocalDate.now(ZoneOffset.UTC);
ChronoUnit
Die ChronoUnit
Klasse verfügt über Methoden für eine verstrichene Anzahl von Jahren Berechnung oder Monate oder Wochen oder so. Wochen dauert es einfach die Anzahl der Tage und teilt sich durch 7. Also ist der erste Wochentag irrelevant. Nicht sicher, ob das Ihren Bedürfnissen entspricht oder nicht, da die Frage vage ist.
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);
Dump zur Konsole.
System.out.println ("epoch: " + epoch + " | today in UTC: " + today + " | weeks: " + weeks);
Epoche: 1970-01-01 | heute in UTC: 2016-08-29 | Wochen: 2434
Sie könnten Ihr Startdatum an einen bestimmten Wochentag anpassen, wenn dies für Ihre Bedürfnisse sinnvoll ist. Ich bin mir nicht sicher, ob das passt, weil die Frage nicht klar ist.
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);
ich etwas fehlt, aber es ist nicht nur 'ChronoUnit.WEEKS.between (LocalDate.ofEpochDay (0), LOCALDATE)'? – Tunaki