2005년 3월 10일 목요일

주(week), 월(month), 년(year)의 모호한 관계들

각 달(month)의 첫째 주와 마지막 주는 두 달(month)에 걸쳐있기 때문에 약간 모호함이 있습니다.
각 해(year)의 첫째 주와 마지막 주도 두 해(year)에 걸쳐 있지요.

0.
각 주는 일요일에 시작하고 토요일에 끝납니다.

1. 한 주를 월을 경계로 분할 하는 방법.
(표기 ? n월 m째 주, m = 1~6)
그렇게 한다면
2005년 1월 첫째주는 ‘2005.1.1’ 하루 밖에 안 되고
2005년 1월 여섯번째 주는 ‘2005.1.30, 2005.1.31’ 이틀 밖에 안됩니다.
각 월의 첫째주와 마지막 주가 대부분 반쪽짜리 주가 됩니다.

2. 월을 무시하고 주를 경계로 분할
(표기 ? n년 m 째주, m = 1 ~ 53)
주가 항상 7일로 보존됩니다.
시스템이 처리하기에는 가장 깔끔합니다.
단점은 월이 보이지 않고 “20번째 주” 같은 표현에 일반적인 사람이 익숙하지 않습니다.

3. 월과 주를 모두 이용하는 경우, 이전 달의 마지막 주와 다음달의 첫째 주가 동치.
(표기 ? n월 m째 주, m = 1~6)
1월의 마지막 주 = 2월의 첫째주
각 월의 1일이 일요일이 아닌 경우
이전 월의 마지막 주와 다음 월의 첫째 주가 겹치게 됩니다.

“이전”, “다음” 버튼을 눌렀을 때, 이동이 약간 모호해 집니다.

4. 월과 주를 모두 이용하는 경우, 이전 달의 마지막 주가 7일이 안되면 날들(days)을 다음달의 첫째 주에 빌려줌.
(표기 ? n월 m째 주, m = 1~5)

각 주의 마지막 날(토요일)이 속한 달이 그 주의 달이 됩니다.

2005년 1월 첫째 주 = 2004년 12월 26일 ~ 2005년 1월 1일
2005년 1월 다섯째 주(마지막 주로 함) = 2005년 1월 23~29일
2005년 2월 첫째 주 = 2005년 1월 30일 ~ 2005년 2월 5일

방송국 순위 프로 같은 곳에서 많이 사용됩니다.
system 내부에서는 2번과 같을 수 있습니다.
필요한 프로그램
a년 b째 주 => c년 d월 e째주로 변환하는 프로그램
a년 b월 c일 => c년 d월 e째주 f번째 날로 변환하는 프로그램
(a년 b월 c일 => d년 e째 주 => f년 g월 h째주로 변환하는 프로그램)
특정 주가 몇 일 ~ 몇 일인지 계산하는 프로그램
각 해의 n * 주번호(0부터 시작) + 1번째 날은 항상 각 주의 일이 됩니다.
그리고 1월 1일은 항상 첫째 주입니다.
이제 1월 1일의 요일을 구하여 일요일을 0 ~ 토요일을 6로 놓고 수치화한 후
1월 1일에서 그 값을 빼면 1주의 시작일이 나옵니다.
거기에 7n을 더하면 n주의 시작일이 나오고
6을 또 더하면 주의 마지막 날도 나옵니다.

댓글 없음:

댓글 쓰기