Joda Zeit: Erster Tag der Woche?
Lösung
Joda-Time verwendet die ISO-Standard Montag bis Sonntag Woche.
Es hat nicht die Fähigkeit, den ersten Tag der Woche zu erhalten, noch die Wochentag Index zurückzukehren basierend auf einem beliebigen anderen Tag als der Standard Montag. Schließlich Wochen werden immer WRT ISO-Regeln berechnet.
Andere Tipps
Es gibt keinen Grund, warum Sie nicht die Verwendung des JDK zumindest machen den „üblichen Beginn der Woche“ für die gegebenen Locale zu finden. Der einzige schwierige Teil ist, Konstanten für Wochentage zu übersetzen, wo beide 1 bis 7 sind, aber java.util.Calendar wird durch eine, mit Calendar.MONDAY = 2 vs. DateTimeConstants.MONDAY = 1 ist.
verschobenWie auch immer, verwenden Sie diese Funktion:
/**
* Gets the first day of the week, in the default locale.
*
* @return a value in the range of {@link DateTimeConstants#MONDAY} to
* {@link DateTimeConstants#SUNDAY}.
*/
private static final int getFirstDayOfWeek() {
return ((Calendar.getInstance().getFirstDayOfWeek() + 5) % 7) + 1;
}
Fügen Sie eine Locale zu Calendar.getInstance () ein Ergebnis für einige Locale andere als der Standard zu erhalten.
Hier ist, wie man um Joda Zeit funktionieren könnte den US-ersten Tag der Woche zu bekommen:
DateTime getFirstDayOfWeek(DateTime other) {
if(other.dayOfWeek.get == 7)
return other;
else
return other.minusWeeks(1).withDayOfWeek(7);
}
oder in Scala
def getFirstDayOfWeek(other: DateTime) = other.dayOfWeek.get match {
case 7 => other
case _ => other.minusWeeks(1).withDayOfWeek(7)
}
Scheint, wie Sie kein Glück, es sieht aus wie alle bereitgestellten Chronologien die Umsetzung von baseChronology erben, die nur ISO-Definitionen unterstützt, d Montag = 1 ... Sonntag = 7.
Sie müßten Ihre eigene LocaleChronology definieren, möglicherweise in Anlehnung an StrictChronology oder LenientChronology, fügen Sie eine Factory-Methode:
public static LocaleChronology getInstance(Chronology base, Locale locale)
und außer Kraft gesetzt, die Umsetzung von
public final DateTimeField dayOfWeek()
mit einer Neuimplementierung von java.util.Calendar.setWeekCountData (Locale desiredLocale), die auf sun.util.resources.LocaleData..getCalendarData (desiredLocale) beruht.
So Ihre Frage ist, wie die DayOfWeek von einem Objekt Joda Datetime zu bekommen? Was ist das:
DateTime dt = new DateTime().withYear(2009).plusDays(111);
dt.toGregorianCalendar().getFirstDayOfWeek();
habe ich folgenden Stummel in Scala
erste und letzte Tage der Woche von Joda
DateTime
zu erhalten
val today: DateTime = new DateTime()
val dayOfWeek: DateTime.Property = today.dayOfWeek()
val firstDayOfWeek: DateTime = dayOfWeek.withMinimumValue().minusDays(1)
val lastDayOfWeek: DateTime = dayOfWeek.withMaximumValue().minusDays(1)
Hinweis : Die minusDays(1)
nur soll die Woche Spanne von Sonntag bis Samstag (anstelle des Standard Montag bis Sonntag bis Joda
bekannt) machen. Für USA (und andere ähnliche) locales , können Sie diesen Teil ignorieren