본문 바로가기

Android

[Android]해당 날짜가 월의 몇 주차인지 구하는 방법

반응형
fun main() {
    val now = DateTime.now()
    val firstDayOfMonth = DateTime(now.year, now.month, 1)
    val firstMonday = if (firstDayOfMonth.weekday.value <= 1) 1 else 8 - firstDayOfMonth.weekday.value
    val weekNumber = (now.day + firstMonday - 1) / 7 + 1
    println("오늘은 이번 달의 ${weekNumber}번째 주입니다.")
}

일단 1일이 포함된 주를 1주차로 가정하고 계산하는 코드는 위와 같습니다.

 

하지만, 목요일이 포함되어야 해당 월의 주로 인정됩니다.(국제표준 ISO-8601)

해당 기준을 적용한 코드는 아래와 같습니다.

import org.joda.time.DateTime
import org.joda.time.Days
import org.joda.time.DurationFieldType
import org.joda.time.Weeks
import org.joda.time.format.DateTimeFormat

fun main() {
    val now = DateTime.now()
    val firstDayOfMonth = DateTime(now.year, now.monthOfYear, 1, 0, 0)
    val firstThursday = firstDayOfMonth.withFieldAdded(DurationFieldType.days(), (11 - firstDayOfMonth.dayOfWeek) % 7)
    val daysSinceFirstThursday = Days.daysBetween(firstThursday, now).days
    val weekNumber = Weeks.weeksBetween(firstThursday, now).weeks + 1
    println("오늘은 이번 달의 ${weekNumber}번째 주입니다.")
}

 

반응형