Frage

Wie beurteilen Sie den ersten Tag der Woche zu bekommen gegeben a Locale Joda-Time mit?

Point: Die meisten Länder nutzen den internationalen Standard Montag als erster Tag der Woche (!). Ein Bündel andere verwenden Sonntag (vor allem USA). Andere scheinbar Samstag. Einige scheinbar Mittwoch?!

Wikipedia "Sieben-Tage-Woche" #Week_number

War es hilfreich?

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.

verschoben

Wie 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top