2016-08-16 4 views
1

Da LOCALDATE ich seit der Epoche zu Woche Zahl konvertieren möchteJava 8: Get Woche Zahl seit Epoche Zeit

Eine Möglichkeit, das zu tun ist:

LocalDate date = datePicker.getValue(); // input from your date picker 
Locale locale = Locale.US; 
int weekOfYear = date.get(WeekFields.of(locale).weekOfWeekBasedYear()); 

And X = find weeks since Epoch to prevYear 

And then result = X + weekOfYear 

Obwohl someway können wir herausfinden, „Wochennummer seit Epoche ", gibt es eine saubere Lösung, um es mit Java 8 zu finden?

UPDATE: Auch obige Lösung wird nicht als eine Woche arbeiten (immer von Sonntag beginnen) für ein Date über 2 Jahre

+3

ich etwas fehlt, aber es ist nicht nur 'ChronoUnit.WEEKS.between (LocalDate.ofEpochDay (0), LOCALDATE)'? – Tunaki

Antwort

3

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

Es gibt eine Methode, da draußen für Millisekunden seit Epoche umspannt:

long timeInMillis = date.getTime(); 

und anscheinend gibt es 604800000 Millisekunden zu einer Woche. Also ich denke, Sie

long weeksSinceEpoch = date.getTime()/604800000; 

gehen könnte ich glaube, Sie würden wahrscheinlich brauchen eigentlich 1 zu Ihrem Endwert obwohl hinzuzufügen, da Java long s abschneidet.

Verwandte Themen