UFO ET IT

Joda 시간 : 요일?

ufoet 2020. 12. 31. 22:42
반응형

Joda 시간 : 요일?


Joda-Time을 사용하여 로케일이 주어지면 첫 번째 요일을 어떻게 얻 습니까?

포인트 : 대부분의 국가에서는 월요일을 첫 번째 요일 (!)로 사용합니다. 다른 사람들은 일요일 (특히 미국)을 사용합니다. 다른 사람들은 분명히 토요일입니다. 수요일에?!

Wikipedia "주 7 일"#Week_number


Joda-Time은 월요일부터 일요일까지 ISO 표준을 사용합니다.

요일을 구하거나 표준 월요일이 아닌 다른 요일을 기준으로 요일 인덱스를 반환하는 기능이 없습니다. 마지막으로주는 항상 ISO 규칙에 따라 계산됩니다.


주어진 로케일에 대한 "관습적인주의 시작"을 찾기 위해 JDK를 사용할 수없는 이유는 없습니다. 유일한 까다로운 부분은 둘 다 1에서 7까지 인 주중 상수를 변환하는 것입니다. 그러나 java.util.Calendar는 Calendar.MONDAY = 2 대 DateTimeConstants.MONDAY = 1로 1 씩 이동합니다.

어쨌든 다음 기능을 사용하십시오.

/**
 * 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;
}

Calendar.getInstance ()에 로케일을 추가하여 기본값이 아닌 일부 로케일에 대한 결과를 얻습니다.


다음은 미국에서 요일을 가져 오기 위해 Joda 시간을 처리하는 방법입니다.

DateTime getFirstDayOfWeek(DateTime other) {
  if(other.dayOfWeek.get == 7)
    return other;
  else
    return other.minusWeeks(1).withDayOfWeek(7);
}

또는 Scala에서

def getFirstDayOfWeek(other: DateTime) = other.dayOfWeek.get match {
    case 7 => other
    case _ => other.minusWeeks(1).withDayOfWeek(7)
}

운이 좋지 않은 것 같습니다. 제공된 모든 연대기가 ISO 정의 (예 : Monday = 1 ... Sunday = 7) 만 지원하는 baseChronology에서 구현을 상속하는 것 같습니다.

StrictChronology 또는 LenientChronology에서 모델링 된 사용자 고유의 LocaleChronology를 정의하고 팩토리 메서드를 추가해야합니다.

public static LocaleChronology getInstance(Chronology base, Locale locale)

구현을 재정의하십시오.

public final DateTimeField dayOfWeek()

sun.util.resources.LocaleData..getCalendarData (desiredLocale)에 의존하는 java.util.Calendar.setWeekCountData (Locale desiredLocale)의 재 구현으로.


그래서 귀하의 질문은 Joda DateTime 객체에서 DayOfWeek를 얻는 방법입니다. 이것에 대해 :

DateTime dt = new DateTime().withYear(2009).plusDays(111);
dt.toGregorianCalendar().getFirstDayOfWeek();

다음 스텁사용하여 Scala해당주의 첫 번째와 마지막 날을Joda DateTime

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)

참고 : minusDays(1)주를 일요일에서 토요일 까지만 표시하기위한 것입니다 (기본 월요일부터 일요일까지로 알려진 대신 Joda). 미국 (및 기타 유사한) 로케일의 경우이 부분을 무시할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/1801907/joda-time-first-day-of-week

반응형