/// <summary> /// 지정한 년도, 분기의 시작 시각 /// </summary> public static DateTime StartTimeOfQuarter(this int year, QuarterKind quarter, int yearStartMonth = TimeSpec.CalendarYearStartMonth) { var months = (quarter.GetHashCode() - 1) * TimeSpec.MonthsPerQuarter; return(new DateTime(year, yearStartMonth, 1).AddMonths(months)); }
public void FirstCustomCalendarQuartersTest() { var calendar = TimeCalendar.New(October); const int startYear = 2004; const QuarterKind startQuarter = QuarterKind.First; const int quarterCount = 5; var quarterRanges = new QuarterRangeCollection(startYear, startQuarter, quarterCount, calendar); quarterRanges.YearBaseMonth.Should().Be(October); quarterRanges.QuarterCount.Should().Be(quarterCount); quarterRanges.StartQuarter.Should().Be(startQuarter); quarterRanges.StartYear.Should().Be(startYear); quarterRanges.EndYear.Should().Be(2005); quarterRanges.EndQuarter.Should().Be(QuarterKind.First); var quarters = quarterRanges.GetQuarters().ToTimePeriodCollection(); quarters.Count.Should().Be(quarterCount); quarters[0].IsSamePeriod(new QuarterRange(2004, QuarterKind.First, calendar)).Should().Be.True(); quarters[1].IsSamePeriod(new QuarterRange(2004, QuarterKind.Second, calendar)).Should().Be.True(); quarters[2].IsSamePeriod(new QuarterRange(2004, QuarterKind.Third, calendar)).Should().Be.True(); quarters[3].IsSamePeriod(new QuarterRange(2004, QuarterKind.Fourth, calendar)).Should().Be.True(); quarters[4].IsSamePeriod(new QuarterRange(2005, QuarterKind.First, calendar)).Should().Be.True(); }
public static YearAndQuarter NextQuarter(this QuarterKind startQuarterKind) { int year; QuarterKind quarter; NextQuarter(startQuarterKind, out year, out quarter); return(new YearAndQuarter(year, quarter)); }
public static YearAndQuarter PreviousQuarter(this QuarterKind startQuarter) { int year; QuarterKind quarterKind; PreviousQuarter(startQuarter, out year, out quarterKind); return(new YearAndQuarter(year, quarterKind)); }
public static YearAndQuarter AddQuarter(this QuarterKind startQuarter, int startYear, int count) { int year; QuarterKind quarterKind; AddQuarter(startQuarter, startYear, count, out year, out quarterKind); return(new YearAndQuarter(year, quarterKind.GetHashCode())); }
public static void AddQuarter(QuarterKind startQuarter, int startYear, int count, out int year, out QuarterKind quarter) { int offsetYear = (Math.Abs(count) / TimeSpec.QuartersPerYear) + 1; int startQuarterCount = ((startYear + offsetYear) * TimeSpec.QuartersPerYear) + ((int)startQuarter - 1); int targetQuarterCount = startQuarterCount + count; year = (targetQuarterCount / TimeSpec.QuartersPerYear) - offsetYear; quarter = (QuarterKind)((targetQuarterCount % TimeSpec.QuartersPerYear) + 1); }
protected QuarterTimeRange(int startYear, QuarterKind startQuarter, int quarterCount, ITimeCalendar calendar) : base(GetPeriodOf(calendar, startYear, startQuarter.GetHashCode(), quarterCount), calendar) { StartYear = startYear; StartQuarter = startQuarter; QuarterCount = quarterCount; var endYearQuarter = TimeTool.AddQuarter(startQuarter, startYear, quarterCount - 1); EndYear = endYearQuarter.Year ?? StartYear; EndQuarter = endYearQuarter.Quarter ?? StartQuarter; }
/// <summary> /// 지정한 달력 기준으로 지정년도, 분기의 기간을 구합니다. /// </summary> /// <param name="calendar"></param> /// <param name="year"></param> /// <param name="quarter"></param> /// <returns></returns> public static TimeSpan Quarter(int year, QuarterKind quarter = QuarterKind.First, Calendar calendar = null) { calendar = calendar ?? CurrentCalendar; var quarterMonths = TimeTool.GetMonthsOfQuarter(quarter); var duration = TimeSpec.NoDuration; foreach (var quarterMonth in quarterMonths) { duration = duration.Add(Month(year, quarterMonth, calendar)); } return(duration); }
/// <summary> /// 특정년도의 분기를 표현하는 문자열을 반환합니다. (2011년 2사분기) /// </summary> /// <param name="year"></param> /// <param name="quarter"></param> /// <returns></returns> public string GetQuarterOfYearName(int year, QuarterKind quarter) { switch (YearKind) { case YearKind.CalendarYear: return(TimeStrings.CalendarQuarterOfYearName(quarter, year)); case YearKind.FiscalYear: return(TimeStrings.FiscalQuarterOfYearName(quarter, year)); case YearKind.SchoolYear: return(TimeStrings.SchoolQuarterOfYearName(quarter, year)); default: return(TimeStrings.SystemQuarterOfYearName(quarter, year)); } }
public static int[] GetMonthsOfQuarter(this QuarterKind quarter) { switch (quarter) { case QuarterKind.First: return(TimeSpec.FirstQuarterMonths); case QuarterKind.Second: return(TimeSpec.SecondQuarterMonths); case QuarterKind.Third: return(TimeSpec.ThirdQuarterMonths); case QuarterKind.Fourth: return(TimeSpec.FourthQuarterMonths); } throw new InvalidOperationException("invalid year quarter " + quarter); }
public void SingleQuartersTest() { const int startYear = 2004; const QuarterKind startQuarter = QuarterKind.Second; var quarterRanges = new QuarterRangeCollection(startYear, startQuarter, 1); quarterRanges.YearBaseMonth.Should().Be(1); quarterRanges.QuarterCount.Should().Be(1); quarterRanges.StartQuarter.Should().Be(startQuarter); quarterRanges.StartYear.Should().Be(startYear); quarterRanges.EndYear.Should().Be(startYear); quarterRanges.EndQuarter.Should().Be(QuarterKind.Second); var quarters = quarterRanges.GetQuarters().ToTimePeriodCollection(); quarters.Count.Should().Be(1); quarters[0].IsSamePeriod(new QuarterRange(2004, QuarterKind.Second)).Should().Be.True(); }
public QuarterRangeCollection(int year, QuarterKind quarter, int quarterCount, ITimeCalendar calendar) : base(year, quarter, quarterCount, calendar) { }
public static void NextQuarter(this QuarterKind startQuarterKind, out int year, out QuarterKind quarter) { AddQuarter(startQuarterKind, 1, out year, out quarter); }
public QuarterRangeCollection(int year, QuarterKind quarter, int quarterCount) : this(year, quarter, quarterCount, new TimeCalendar()) { }
public QuarterRange(int year, QuarterKind quarter) : this(year, quarter, new TimeCalendar()) { }
protected QuarterTimeRange(int startYear, QuarterKind startQuarter, int quarterCount) : this(startYear, startQuarter, quarterCount, new TimeCalendar()) { }
public static string CalendarQuarterOfYearName(QuarterKind quarter, int year) { return(Format(CalendarQuarterOfYearNameFormat, (int)quarter, year)); }
/// <summary> /// 지정한 년도, 분기의 완료 시각 /// </summary> public static DateTime EndTimeOfQuarter(this int year, QuarterKind quarter, int yearStartMonth = TimeSpec.CalendarYearStartMonth) { return (StartTimeOfQuarter(year, quarter, yearStartMonth).AddMonths(TimeSpec.MonthsPerQuarter).Add(TimeSpec.MinNegativeDuration)); }
/// <summary> /// 해당 분기의 시작월 /// </summary> /// <param name="quarter">해당 분기</param> /// <returns>해당분기의 시작월</returns> public static int StartMonthOfQuarter(this QuarterKind quarter) { return(TimeSpec.MonthsPerQuarter * ((int)quarter - 1) + 1); }
public static string SchoolQuarterName(QuarterKind quarter) { return Format(SchoolQuarterNameFormat, (int)quarter); }
/// <summary> /// 지정한 년도, 분기의 시작 시각 /// </summary> public static DateTime StartTimeOfQuarter(this int year, QuarterKind quarter, int yearStartMonth = TimeSpec.CalendarYearStartMonth) { var months = (quarter.GetHashCode() - 1) * TimeSpec.MonthsPerQuarter; return new DateTime(year, yearStartMonth, 1).AddMonths(months); }
/// <summary> /// 지정한 년도, 분기의 완료 시각 /// </summary> public static DateTime EndTimeOfQuarter(this int year, QuarterKind quarter, int yearStartMonth = TimeSpec.CalendarYearStartMonth) { return StartTimeOfQuarter(year, quarter, yearStartMonth).AddMonths(TimeSpec.MonthsPerQuarter).Add(TimeSpec.MinNegativeDuration); }
public static void PreviousQuarter(this QuarterKind startQuarter, out int year, out QuarterKind quarter) { AddQuarter(startQuarter, -1, out year, out quarter); }
public QuarterRangeCollection(int year, QuarterKind quarter, int quarterCount, ITimeCalendar calendar) : base(year, quarter, quarterCount, calendar) {}
public static void AddQuarter(this QuarterKind startQuarter, int count, out int year, out QuarterKind quarter) { AddQuarter(startQuarter, 0, count, out year, out quarter); }
public static string FiscalQuarterName(QuarterKind quarter) { return(Format(FiscalQuarterNameFormat, (int)quarter)); }
public static string SchoolQuarterOfYearName(QuarterKind quarter, int year) { return Format(SchoolQuarterOfYearNameFormat, (int)quarter, year); }
public static string SchoolQuarterName(QuarterKind quarter) { return(Format(SchoolQuarterNameFormat, (int)quarter)); }
public static string CalendarQuarterName(QuarterKind quarter) { return Format(CalendarQuarterNameFormat, (int)quarter); }
public static string SchoolQuarterOfYearName(QuarterKind quarter, int year) { return(Format(SchoolQuarterOfYearNameFormat, (int)quarter, year)); }
public static YearAndQuarter AddQuarter(this QuarterKind startQuarter, int count) { return(AddQuarter(startQuarter, 0, count)); }
public static string CalendarQuarterOfYearName(QuarterKind quarter, int year) { return Format(CalendarQuarterOfYearNameFormat, (int)quarter, year); }
public QuarterRange(int year, QuarterKind quarter) : this(year, quarter, new TimeCalendar()) {}
public static string SystemQuarterName(QuarterKind quarter) { return Format(SystemQuarterNameFormat, (int)quarter); }
public QuarterRangeCollection(int year, QuarterKind quarter, int quarterCount) : this(year, quarter, quarterCount, new TimeCalendar()) {}
public static string FiscalQuarterName(QuarterKind quarter) { return Format(FiscalQuarterNameFormat, (int)quarter); }
public QuarterRange(int year, QuarterKind quarter, ITimeCalendar calendar) : base(year, quarter, 1, calendar) { }
/// <summary> /// 해당 분기의 마지막 월 /// </summary> /// <param name="quarter">해당 분기</param> /// <returns>해당 분기의 마지막 월</returns> public static int EndMonthOfQuarter(this QuarterKind quarter) { return(TimeSpec.MonthsPerQuarter * (int)quarter); }
public QuarterRange(int year, QuarterKind quarter, ITimeCalendar calendar) : base(year, quarter, 1, calendar) {}