본문 바로가기

C#/Calendar

C# 달력관련 클래스

C# 달력관련 클래스

 

 

using System;
using System.Collections.Generic;
 
namespace Calrendar.Utils
{
    public class CalendarInfo
    {
        public int Month { get; set; }
        /// <summary>
        /// 달력 1일 이전의 빈 공간 데이터까지 가지고 있음
        /// </summary>
        public List<CalendarDayInfo> DayListUI = new List<CalendarDayInfo>();
        /// <summary>
        /// 기본 숫자(일)만 표현
        /// </summary>
        public List<CalendarDayInfo> DayList = new List<CalendarDayInfo>();
    }
 
    public class CalendarDayInfo
    {
        /// <summary>
        /// 1일 이전의 빈 공간은 NULL
        /// </summary>
        public int? Day { get; set; }
        public DayOfWeek DayOfWeek { get; set; }
    }
 
    public class CalendarHelper
    {
        /// <summary>
        /// 오늘 날짜 가져오기
        /// </summary>
        /// <returns></returns>
        public static DateTime GetTodayDate()
        {
            return DateTime.Today;
        }
 
        /// <summary>
        /// 해당 월의 첫날 가져오기
        /// </summary>
        /// <param name="addMonth"></param>
        /// <returns></returns>
        public static DateTime GetFirstDay(int addMonth)
        {
            DateTime date = DateTime.Today.AddMonths(addMonth);
            return date.AddDays(1 - date.Day);
        }
 
        /// <summary>
        /// 해당 월의 마지막날 가져오기
        /// </summary>
        /// <param name="addMonth"></param>
        /// <returns></returns>
        public static DateTime GetLastDay(int addMonth)
        {
            DateTime date = DateTime.Today.AddMonths(addMonth);
            return date.AddMonths(1).AddDays(0 - date.Day);
        }
 
        /// <summary>
        /// 해당 월의 날짜 정보 가져오기
        /// </summary>
        /// <param name="addMonth"></param>
        /// <returns></returns>
        public static CalendarInfo GetDaysOfMonth(int addMonth)
        {
            DateTime first = GetFirstDay(addMonth);
            var firstDayInfo = new CalendarDayInfo() { Day = first.Day, DayOfWeek = first.DayOfWeek };
 
            DateTime last = GetLastDay(addMonth);
            var lastDayInfo = new CalendarDayInfo() { Day = last.Day, DayOfWeek = last.DayOfWeek };
 
            var intDayOfWeek = (int)firstDayInfo.DayOfWeek;
 
            List<CalendarDayInfo> dayListUI = new List<CalendarDayInfo>();
            // 달력 1일 이전 공백
            for (int i = 0; i < intDayOfWeek; i++)
            {
                dayListUI.Add(new CalendarDayInfo() { DayOfWeek = (DayOfWeek)i });
            }
            // first day ~ last day
            for (int i = 0; i < last.Day; i++)
            {
                var date = first.AddDays(i);
                dayListUI.Add(new CalendarDayInfo() { Day = date.Day, DayOfWeek = date.DayOfWeek});
            }
 
            List<CalendarDayInfo> dayList = new List<CalendarDayInfo>();
            // first day ~ last day
            for (int i = 0; i < last.Day; i++)
            {
                var date = first.AddDays(i);
                dayList.Add(new CalendarDayInfo() { Day = date.Day, DayOfWeek = date.DayOfWeek });
            }
 
            CalendarInfo calendarInfo = new CalendarInfo();
            calendarInfo.Month = first.Month;
            calendarInfo.DayListUI = dayListUI;
            calendarInfo.DayList = dayList;
 
            return calendarInfo;
        }
    }
}

'C# > Calendar' 카테고리의 다른 글

C# 날짜관련 / 달력관련  (0) 2020.08.20