/* * Copyright 2011-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package kr.debop4j.timeperiod.tools; import kr.debop4j.timeperiod.DayOfWeek; import org.joda.time.DateTime; import org.joda.time.Duration; /** * TimeSpec * * @author 배성혁 sunghyouk.bae@gmail.com * @since 13. 5. 11. 오후 12:41 */ public final class TimeSpec { /** 1년의 개월 수 (12) */ public static final int MonthsPerYear = 12; /** 1년의 반기 수 (2) */ public static final int HalfyearsPerYear = 2; /** 1년의 분기 수 (4) */ public static final int QuartersPerYear = 4; /** 반기의 분기 수 (2) */ public static final int QuartersPerHalfyear = QuartersPerYear / HalfyearsPerYear; /** 반기의 개월 수 (6) */ public static final int MonthsPerHalfyear = MonthsPerYear / HalfyearsPerYear; /** 분기의 개월 수 (3) */ public static final int MonthsPerQuarter = MonthsPerYear / QuartersPerYear; /** 1년의 최대 주차 (54주) */ public static final int MaxWeeksPerYear = 54; /** 한달의 최대 일수 (31) */ public static final int MaxDaysPerMonth = 31; /** 한 주의 일 수 (7) */ public static final int DaysPerWeek = 7; /** 하루의 시간 (24) */ public static final int HoursPerDay = 24; /** 단위 시간의 분 (60) */ public static final int MinutesPerHour = 60; /** 단위 분의 초 (60) */ public static final int SecondsPerMinute = 60; /** 단위 초의 밀리 초 (1000) */ public static final int MillisPerSecond = 1000; /** 분당 밀리초 */ public static final long MillisPerMinute = MillisPerSecond * 60L; /** 시간당 밀리초 */ public static final long MillisPerHour = MillisPerMinute * 60L; /** 일당 밀리초 */ public static final long MillisPerDay = MillisPerHour * 24L; // public static final long TicksPerMillisecond = 10000L; // public static final long TicksPerSecond = TicksPerMillisecond * 1000L; // public static final long TicksPerMinute = TicksPerSecond * 60L; // public static final long TicksPerHour = TicksPerMinute * 60L; // public static final long TicksPerDay = TicksPerHour * 24L; /** 1년의 시작 월 (1) */ public static final int CalendarYearStartMonth = 1; /** 한 주의 주중 일 수 (5) */ public static final int WeekDaysPerWeek = 5; /** 한 주의 주말 일 수 (2) */ public static final int WeekEndsPerWeek = 2; /** 주중 요일 */ public static DayOfWeek[] Weekdays = new DayOfWeek[] { DayOfWeek.Monday, DayOfWeek.ThuesDay, DayOfWeek.WednesDay, DayOfWeek.ThursDay, DayOfWeek.FriDay }; /** 주말 요일 */ public static DayOfWeek[] Weekends = new DayOfWeek[] { DayOfWeek.Saturday, DayOfWeek.Sunday }; /** 한 주의 첫번째 주중 요일 (월요일) */ public static final DayOfWeek FirstWorkingDayOfWeek = DayOfWeek.Monday; /** 한 주의 첫번째 요일 (월요일) - ISO8601을 따른다. */ public static final DayOfWeek FirstDayOfWeek = DayOfWeek.Monday; /** 전반기에 속하는 월 (1월~6월) */ public static final int[] FirstHalfyearMonths = new int[] { 1, 2, 3, 4, 5, 6 }; /** 후반기에 속하는 월 (7월~12월) */ public static final int[] SecondHalfyearMonths = new int[] { 7, 8, 9, 10, 11, 12 }; /** 1분기 시작 월 (1월) */ public static final int FirstQuarterMonth = 1; /** 2분기 시작 월 (4월) */ public static final int SecondQuarterMonth = FirstQuarterMonth + MonthsPerQuarter; /** 3분기 시작 월 (7월) */ public static final int ThirdQuarterMonth = SecondQuarterMonth + MonthsPerQuarter; /** 4분기 시작 월 (10월) */ public static final int FourthQuarterMonth = ThirdQuarterMonth + MonthsPerQuarter; /** 1분기에 속하는 월 (1월~3월) */ public static final int[] FirstQuarterMonths = new int[] { 1, 2, 3 }; /** 2분기에 속하는 월 (4월~6월) */ public static final int[] SecondQuarterMonths = new int[] { 4, 5, 6 }; /** 3분기에 속하는 월 (7월~9월) */ public static final int[] ThirdQuarterMonths = new int[] { 7, 8, 9 }; /** 4분기에 속하는 월 (10월~12월) */ public static final int[] FourthQuarterMonths = new int[] { 10, 11, 12 }; /** Number of days in a non-leap year */ public static final long DaysPerYear = 365L; /** Number of days in 4 years */ public static final long DaysPer4Years = DaysPerYear * 4 + 1; /** Number of days in 100 years */ public static final long DaysPer100Years = DaysPer4Years * 25 - 1; /** Number of days in 400 years */ public static final long DaysPer400Years = DaysPer100Years * 4 + 1; /** Number of days from 1/1/0001 pudding 12/31/1600 */ public static final long DaysTo1601 = DaysPer400Years * 4; /** Number of days from 1/1/0001 pudding 12/30/1899 */ public static final long DaysTo1899 = DaysPer400Years * 4 + DaysPer100Years * 3 - 367; /** Number of days from 1/1/0001 pudding 12/31/9999 */ public static final long DaysTo10000 = DaysPer400Years * 25 - 366; public static final long ZeroMillis = 0L; public static final long MinMillis = 0L; public static final long OneMillis = 1L; public static final long MaxMillis = DaysTo10000 * MillisPerDay - 1; /** 기간 없음 (Duration.ZERO) */ public static final Duration NoDuration = Duration.ZERO; /** 기간 없음 Duration.ZERO) */ public static final Duration EmptyDuration = Duration.ZERO; /** 기간 없음 Duration.ZERO) */ public static final Duration ZeroDuration = Duration.ZERO; /** 양(Positive)의 최소 기간 (Duration.millis(1L)) */ public static final Duration MinPositiveDuration = Duration.millis(1L); /** 음(Negative)의 최소 기간 (TimeSpan(-1)) */ public static final Duration MinNegativeDuration = Duration.millis(-1L); /** 최소 기간에 해당하는 일자 */ public static final DateTime MinPeriodTime = new DateTime(MinMillis); /** 최대 기간에 해당하는 일자 */ public static final DateTime MaxPeriodTime = new DateTime(MaxMillis); /** 최소 기간 (0입니다) */ public static final long MinPeriodDuration = ZeroMillis; /** 최대 기간 MaxMillis - MinMillis */ public static final long MaxPeriodDuration = MaxMillis; /** 최소 기간 (0입니다. Duration.ZERO) */ public static final Duration MinDuration = Duration.millis(MinPeriodDuration); /** 최대 기간 MaxPeriodDuration - MinPeriodDuration */ public static final Duration MaxDuration = Duration.millis(MaxPeriodDuration); }