using System;
using System.Drawing;
using GrapeCity.Web.Input.Core;
using GrapeCity.Web.Input.IMCalendar;
public partial class Control_InputControls : System.Web.UI.Page
{
HolidayStyle nationalHoliday = new HolidayStyle();
HolidayStyle normalday = new HolidayStyle();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// コンボ、カレンダーコントロールの初期値を設定します。
GcComboBox1.SelectedIndex = 0;
GcCalendar1.SelectedDate = DateTimeEx.Today;
// カレンダーコントロールに国民の祝日を設定します。
SetNationalHoliday();
}
}
private void SetNationalHoliday()
{
// 2019年4月現在の国民の祝日を設定します。
// 固定の祝日を設定します。
nationalHoliday.Name = "国民の祝日";
nationalHoliday.SubStyle = new SubStyle(Color.WhiteSmoke, Color.Red);
nationalHoliday.Holidays.Add(new Holiday("元旦", 1, 1));
nationalHoliday.Holidays.Add(new Holiday("建国記念の日", 2, 11));
nationalHoliday.Holidays.Add(new Holiday("昭和の日", 4, 29));
nationalHoliday.Holidays.Add(new Holiday("憲法記念日", 5, 3));
nationalHoliday.Holidays.Add(new Holiday("みどりの日", 5, 4));
nationalHoliday.Holidays.Add(new Holiday("こどもの日", 5, 5));
nationalHoliday.Holidays.Add(new Holiday("文化の日", 11, 3));
nationalHoliday.Holidays.Add(new Holiday("勤労感謝の日", 11, 23));
// ハッピーマンデーを設定します。
nationalHoliday.Holidays.Add(new DayOfWeekHoliday("成人の日", MonthFlags.January, DayOfWeekInMonthFlags.Second, DayOfWeekFlags.Monday));
nationalHoliday.Holidays.Add(new DayOfWeekHoliday("海の日", MonthFlags.July, DayOfWeekInMonthFlags.Third, DayOfWeekFlags.Monday));
nationalHoliday.Holidays.Add(new DayOfWeekHoliday("敬老の日", MonthFlags.September, DayOfWeekInMonthFlags.Third, DayOfWeekFlags.Monday));
nationalHoliday.Holidays.Add(new DayOfWeekHoliday("体育の日", MonthFlags.October, DayOfWeekInMonthFlags.Second, DayOfWeekFlags.Monday));
// 天皇即位にともなう休日を設定します。
nationalHoliday.Holidays.Add(new ForceHoliday("休日", DateTime.Parse("2019/4/30")));
nationalHoliday.Holidays.Add(new ForceHoliday("休日", DateTime.Parse("2019/5/1")));
nationalHoliday.Holidays.Add(new ForceHoliday("休日", DateTime.Parse("2019/5/2")));
nationalHoliday.Holidays.Add(new ForceHoliday("休日", DateTime.Parse("2019/10/22")));
// 2020年の東京オリンピック・東京パラリンピックにともなう休日を設定します。
nationalHoliday.Holidays.Add(new ForceHoliday("海の日", DateTime.Parse("2020/7/23")));
nationalHoliday.Holidays.Add(new ForceHoliday("スポーツの日", DateTime.Parse("2020/7/24")));
nationalHoliday.Holidays.Add(new ForceHoliday("山の日", DateTime.Parse("2020/8/10")));
// 2020年の「7月20日」「10月12日」を通常日に設定します。
normalday.Name = "通常日";
normalday.Holidays.Add(new ForceWorkday("", DateTime.Parse("2020/7/20")));
normalday.Holidays.Add(new ForceWorkday("", DateTime.Parse("2020/10/12")));
//normalday.Holidays.Add(new ForceDayOfWeekWorkday(2020 , MonthFlags.July, DayOfWeekInMonthFlags.Third, DayOfWeekFlags.Monday));
//normalday.Holidays.Add(new ForceDayOfWeekWorkday(2020, MonthFlags.October, DayOfWeekInMonthFlags.Second, DayOfWeekFlags.Monday));
// 年によって変化する祝日を2000年~2050年の分を設定します。
for (int i = 2000; i <= 2050; i++)
{
SetYearHoliday(i);
}
// 振替休日の扱いを設定します。
nationalHoliday.Holidays.Weekdays.Sunday = new DayOfWeekHolidayPolicy(WeekFlags.All, HolidayOverride.NextWorkday);
GcCalendar1.OverrideTipText = "振替休日";
// 休日スタイルをコレクションに追加してカレンダーに反映させます。
GcCalendar1.HolidayStyles.Add("国民の祝日", nationalHoliday);
GcCalendar1.HolidayStyles.Add("通常日", normalday);
GcCalendar1.ActiveHolidayStyles = new string[] { "国民の祝日", "通常日" };
}
private void SetYearHoliday(int Year)
{
// 年によって変化する国民の祝日を設定します。
int currentYear = Year;
// 春分の日と秋分の日の初期値として2019年の祝日を設定します。
DateTime syunbun = DateTime.Parse(currentYear.ToString() + "/3/21");
DateTime syubun = DateTime.Parse(currentYear.ToString() + "/9/23");
switch (currentYear % 4)
{
case 0:
// 春分の日を設定します。
if (currentYear < 1960)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/21");
}
else if (currentYear >= 1960 && currentYear < 2092)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/20");
}
else
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/19");
}
// 秋分の日を設定します。
if (currentYear < 2012)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/23");
}
else
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/22");
}
break;
case 1:
// 春分の日を設定します。
if (currentYear < 1993)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/21");
}
else
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/20");
}
// 秋分の日を設定します。
if (currentYear < 1921)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/24");
}
else if (currentYear >= 1921 && currentYear < 2045)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/23");
}
else
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/22");
}
break;
case 2:
// 春分の日を設定します。
if (currentYear < 2026)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/21");
}
else
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/20");
}
// 秋分の日を設定します。
if (currentYear < 1950)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/24");
}
else if (currentYear >= 1950 && currentYear < 2078)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/23");
}
else
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/22");
}
break;
case 3:
// 春分の日を設定します。
if (currentYear < 1927)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/22");
}
else if (currentYear >= 1927 && currentYear < 2059)
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/21");
}
else
{
syunbun = DateTime.Parse(currentYear.ToString() + "/3/20");
}
// 秋分の日を設定します。
if (currentYear < 1983)
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/24");
}
else
{
syubun = DateTime.Parse(currentYear.ToString() + "/9/23");
}
break;
}
// 春分の日を設定します。
nationalHoliday.Holidays.Add(new ForceHoliday("春分の日", syunbun));
// 秋分の日を設定します。
nationalHoliday.Holidays.Add(new ForceHoliday("秋分の日", syubun));
// 2つの祝日に挟まれた営業日を休日に設定します。
if (currentYear > 2003)
{
if (syubun.DayOfWeek == System.DayOfWeek.Wednesday)
{
nationalHoliday.Holidays.Add(new ForceHoliday("休日", syubun.AddDays(-1)));
}
}
// 2016年以降「山の日」を追加します。
if (currentYear > 2015 && currentYear != 2020)
{
nationalHoliday.Holidays.Add(new ForceHoliday("山の日", DateTime.Parse(currentYear.ToString() + "/8/11")));
}
// 天皇誕生日を追加します。
if (currentYear < 2019)
{
nationalHoliday.Holidays.Add(new ForceHoliday("天皇誕生日", DateTime.Parse(currentYear.ToString() + "/12/23")));
}
else if (currentYear > 2019)
{
nationalHoliday.Holidays.Add(new ForceHoliday("天皇誕生日", DateTime.Parse(currentYear.ToString() + "/2/23")));
}
}
}
|