[{"data":1,"prerenderedAt":358},["ShallowReactive",2],{"content-en-getting-started":3},{"doc":4,"debug":355},{"id":5,"title":6,"body":7,"description":25,"extension":349,"meta":350,"navigation":94,"path":351,"seo":352,"stem":353,"__hash__":354},"content\u002Fen\u002Fgetting-started.md","Getting Started",{"type":8,"value":9,"toc":341},"minimark",[10,14,19,48,73,77,137,168,172,238,242,257,261,275,317,321,337],[11,12,6],"h1",{"id":13},"getting-started",[15,16,18],"h2",{"id":17},"install","Install",[20,21,26],"pre",{"className":22,"code":23,"language":24,"meta":25,"style":25},"language-bash shiki shiki-themes github-light","dotnet add package Ozakboy.TaiwanKit.TaiwanHolidays\n","bash","",[27,28,29],"code",{"__ignoreMap":25},[30,31,34,38,42,45],"span",{"class":32,"line":33},"line",1,[30,35,37],{"class":36},"s7eDp","dotnet",[30,39,41],{"class":40},"sYBdl"," add",[30,43,44],{"class":40}," package",[30,46,47],{"class":40}," Ozakboy.TaiwanKit.TaiwanHolidays\n",[49,50,51,52,55,56,55,59,55,62,55,65,68,69,72],"p",{},"Supported frameworks: ",[27,53,54],{},"netstandard2.0"," \u002F ",[27,57,58],{},"netstandard2.1",[27,60,61],{},"net8.0",[27,63,64],{},"net9.0",[27,66,67],{},"net10.0"," (with ",[27,70,71],{},"DateOnly"," overloads on net8+). Zero runtime dependencies, works fully offline.",[15,74,76],{"id":75},"basic-queries","Basic queries",[20,78,82],{"className":79,"code":80,"language":81,"meta":25,"style":25},"language-csharp shiki shiki-themes github-light","using Ozakboy.TaiwanKit.TaiwanHolidays;\n\nHolidayCalendar.IsHoliday(new DateTime(2026, 10, 10));   \u002F\u002F true  (National Day)\nHolidayCalendar.IsWorkday(new DateTime(2023, 1, 7));     \u002F\u002F true  (a make-up Saturday!)\n\nTaiwanDayInfo info = HolidayCalendar.GetDayInfo(new DateTime(2026, 2, 17));\n\u002F\u002F info.Kind        → DayKind.Holiday\n\u002F\u002F info.Name        → \"春節\"\n\u002F\u002F info.EnglishName → \"Lunar New Year\"\n","csharp",[27,83,84,89,96,102,108,113,119,125,131],{"__ignoreMap":25},[30,85,86],{"class":32,"line":33},[30,87,88],{},"using Ozakboy.TaiwanKit.TaiwanHolidays;\n",[30,90,92],{"class":32,"line":91},2,[30,93,95],{"emptyLinePlaceholder":94},true,"\n",[30,97,99],{"class":32,"line":98},3,[30,100,101],{},"HolidayCalendar.IsHoliday(new DateTime(2026, 10, 10));   \u002F\u002F true  (National Day)\n",[30,103,105],{"class":32,"line":104},4,[30,106,107],{},"HolidayCalendar.IsWorkday(new DateTime(2023, 1, 7));     \u002F\u002F true  (a make-up Saturday!)\n",[30,109,111],{"class":32,"line":110},5,[30,112,95],{"emptyLinePlaceholder":94},[30,114,116],{"class":32,"line":115},6,[30,117,118],{},"TaiwanDayInfo info = HolidayCalendar.GetDayInfo(new DateTime(2026, 2, 17));\n",[30,120,122],{"class":32,"line":121},7,[30,123,124],{},"\u002F\u002F info.Kind        → DayKind.Holiday\n",[30,126,128],{"class":32,"line":127},8,[30,129,130],{},"\u002F\u002F info.Name        → \"春節\"\n",[30,132,134],{"class":32,"line":133},9,[30,135,136],{},"\u002F\u002F info.EnglishName → \"Lunar New Year\"\n",[49,138,139,140,143,144,143,147,143,150,143,153,143,156,159,160,167],{},"Six-way day classification: ",[27,141,142],{},"Workday",", ",[27,145,146],{},"Weekend",[27,148,149],{},"Holiday",[27,151,152],{},"MakeupHoliday",[27,154,155],{},"AdjustedHoliday",[27,157,158],{},"MakeupWorkday",". ",[161,162,163,166],"strong",{},[27,164,165],{},"IsWorkday"," = Workday or MakeupWorkday"," — make-up Saturdays are workdays.",[15,169,171],{"id":170},"scheduling-helpers","Scheduling helpers",[20,173,175],{"className":79,"code":174,"language":81,"meta":25,"style":25},"\u002F\u002F Next workday across the Lunar New Year break\nHolidayCalendar.GetNextWorkday(new DateTime(2026, 2, 13));       \u002F\u002F 2026-02-23\n\n\u002F\u002F Inclusive workday count\nHolidayCalendar.CountWorkdays(new DateTime(2026, 2, 1), new DateTime(2026, 2, 28));\n\n\u002F\u002F Consecutive holiday periods (3+ days)\nforeach (HolidayPeriod p in HolidayCalendar.GetHolidayPeriods(2026))\n{\n    Console.WriteLine($\"{p.Start:MM\u002Fdd}~{p.End:MM\u002Fdd} {p.TotalDays} days {p.Name}\");\n}\n\u002F\u002F e.g. 02\u002F14~02\u002F22 9 days 春節\n",[27,176,177,182,187,191,196,201,205,210,215,220,226,232],{"__ignoreMap":25},[30,178,179],{"class":32,"line":33},[30,180,181],{},"\u002F\u002F Next workday across the Lunar New Year break\n",[30,183,184],{"class":32,"line":91},[30,185,186],{},"HolidayCalendar.GetNextWorkday(new DateTime(2026, 2, 13));       \u002F\u002F 2026-02-23\n",[30,188,189],{"class":32,"line":98},[30,190,95],{"emptyLinePlaceholder":94},[30,192,193],{"class":32,"line":104},[30,194,195],{},"\u002F\u002F Inclusive workday count\n",[30,197,198],{"class":32,"line":110},[30,199,200],{},"HolidayCalendar.CountWorkdays(new DateTime(2026, 2, 1), new DateTime(2026, 2, 28));\n",[30,202,203],{"class":32,"line":115},[30,204,95],{"emptyLinePlaceholder":94},[30,206,207],{"class":32,"line":121},[30,208,209],{},"\u002F\u002F Consecutive holiday periods (3+ days)\n",[30,211,212],{"class":32,"line":127},[30,213,214],{},"foreach (HolidayPeriod p in HolidayCalendar.GetHolidayPeriods(2026))\n",[30,216,217],{"class":32,"line":133},[30,218,219],{},"{\n",[30,221,223],{"class":32,"line":222},10,[30,224,225],{},"    Console.WriteLine($\"{p.Start:MM\u002Fdd}~{p.End:MM\u002Fdd} {p.TotalDays} days {p.Name}\");\n",[30,227,229],{"class":32,"line":228},11,[30,230,231],{},"}\n",[30,233,235],{"class":32,"line":234},12,[30,236,237],{},"\u002F\u002F e.g. 02\u002F14~02\u002F22 9 days 春節\n",[15,239,241],{"id":240},"yearly-lists","Yearly lists",[20,243,245],{"className":79,"code":244,"language":81,"meta":25,"style":25},"HolidayCalendar.GetHolidays(2026);         \u002F\u002F holidays \u002F make-up holidays \u002F adjusted days off\nHolidayCalendar.GetMakeupWorkdays(2023);   \u002F\u002F make-up Saturdays of the year\n",[27,246,247,252],{"__ignoreMap":25},[30,248,249],{"class":32,"line":33},[30,250,251],{},"HolidayCalendar.GetHolidays(2026);         \u002F\u002F holidays \u002F make-up holidays \u002F adjusted days off\n",[30,253,254],{"class":32,"line":91},[30,255,256],{},"HolidayCalendar.GetMakeupWorkdays(2023);   \u002F\u002F make-up Saturdays of the year\n",[15,258,260],{"id":259},"out-of-range-behavior","Out-of-range behavior",[49,262,263,264,267,268,274],{},"Data covers ",[161,265,266],{},"2017-01-01 to 2027-12-31",". Out-of-range queries ",[161,269,270,271],{},"always throw ",[27,272,273],{},"ArgumentOutOfRangeException"," — this library never guesses from weekends alone. For graceful handling:",[20,276,278],{"className":79,"code":277,"language":81,"meta":25,"style":25},"if (HolidayCalendar.TryGetDayInfo(date, out TaiwanDayInfo? info))\n{\n    \u002F\u002F within range\n}\n\n\u002F\u002F or check beforehand\nvar min = HolidayCalendar.MinDate;   \u002F\u002F 2017-01-01\nvar max = HolidayCalendar.MaxDate;   \u002F\u002F 2027-12-31\n",[27,279,280,285,289,294,298,302,307,312],{"__ignoreMap":25},[30,281,282],{"class":32,"line":33},[30,283,284],{},"if (HolidayCalendar.TryGetDayInfo(date, out TaiwanDayInfo? info))\n",[30,286,287],{"class":32,"line":91},[30,288,219],{},[30,290,291],{"class":32,"line":98},[30,292,293],{},"    \u002F\u002F within range\n",[30,295,296],{"class":32,"line":104},[30,297,231],{},[30,299,300],{"class":32,"line":110},[30,301,95],{"emptyLinePlaceholder":94},[30,303,304],{"class":32,"line":115},[30,305,306],{},"\u002F\u002F or check beforehand\n",[30,308,309],{"class":32,"line":121},[30,310,311],{},"var min = HolidayCalendar.MinDate;   \u002F\u002F 2017-01-01\n",[30,313,314],{"class":32,"line":127},[30,315,316],{},"var max = HolidayCalendar.MaxDate;   \u002F\u002F 2027-12-31\n",[15,318,320],{"id":319},"data-policy","Data policy",[322,323,324,328,331,334],"ul",{},[325,326,327],"li",{},"Single source: the official DGPA \"government office calendar\" (data.gov.tw open data)",[325,329,330],{},"Includes the 2025 statutory holiday reform (Teachers' Day, Retrocession Day, Constitution Day, Labor Day for all, Lunar New Year's Eve Eve)",[325,332,333],{},"A new minor version ships after each yearly announcement (around May-June)",[325,335,336],{},"Not included: typhoon suspensions (not nationwide-uniform) and observances that are not days off",[338,339,340],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}",{"title":25,"searchDepth":91,"depth":98,"links":342},[343,344,345,346,347,348],{"id":17,"depth":91,"text":18},{"id":75,"depth":91,"text":76},{"id":170,"depth":91,"text":171},{"id":240,"depth":91,"text":241},{"id":259,"depth":91,"text":260},{"id":319,"depth":91,"text":320},"md",{},"\u002Fen\u002Fgetting-started",{"title":6,"description":25},"en\u002Fgetting-started","N-yEJj1Mmb63WIoofl49iBK328bnVNzgJFEz2xeiktk",{"matched":356,"target":351,"all":357},"path()",null,1783231663221]