├── docs ├── CNAME ├── readme │ ├── demo.png │ ├── ios.jpg │ ├── macos.png │ └── overview.png ├── work.ics └── rest.ics ├── .github ├── trigger.json └── workflows │ ├── cd.yml │ └── ci.yml ├── data ├── readme.txt ├── 2017.txt ├── 2020.txt ├── 2023.txt ├── 2025.txt ├── 2015.txt ├── 2014.txt ├── 2019.txt ├── 2016.txt ├── 2018.txt ├── 2021.txt ├── 2022.txt ├── 2024.txt ├── 2026.txt └── 2013.txt ├── pyproject.toml ├── holiday_llm.prompt ├── .editorconfig ├── crawler.http ├── parser ├── Main.hs ├── Main │ ├── Output.hs │ ├── Input.hs │ └── Base.hs └── Test.hs ├── README.md ├── holiday_llm.py ├── .gitignore ├── parser.cabal ├── crawler.py └── LICENSE /docs/CNAME: -------------------------------------------------------------------------------- 1 | ical.muhan.org -------------------------------------------------------------------------------- /.github/trigger.json: -------------------------------------------------------------------------------- 1 | { 2 | "trigger": 0 3 | } 4 | -------------------------------------------------------------------------------- /docs/readme/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muhac/chinese-holidays-calendar/HEAD/docs/readme/demo.png -------------------------------------------------------------------------------- /docs/readme/ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muhac/chinese-holidays-calendar/HEAD/docs/readme/ios.jpg -------------------------------------------------------------------------------- /docs/readme/macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muhac/chinese-holidays-calendar/HEAD/docs/readme/macos.png -------------------------------------------------------------------------------- /docs/readme/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muhac/chinese-holidays-calendar/HEAD/docs/readme/overview.png -------------------------------------------------------------------------------- /data/readme.txt: -------------------------------------------------------------------------------- 1 | 文件格式 2 | 年份开头,形如 2022.txt 3 | 4 | 数据格式 5 | 节日名;放假日期 6 | 节日名;放假日期;补班日期 7 | 8 | 日期格式 9 | Y.M.D,Y.M.D-Y.M.D 10 | 支持多选 “,” 和区间 “-” 11 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "chinese-holidays-calendar" 3 | version = "0.0.0" 4 | description = "Chinese holidays calendar crawler and parser" 5 | readme = "README.md" 6 | requires-python = ">=3.11" 7 | dependencies = [ 8 | "langsmith~=0.4.23", 9 | "openai~=1.105.0", 10 | "python-dateutil~=2.9.0.post0", 11 | "requests~=2.32.5", 12 | ] 13 | 14 | [dependency-groups] 15 | dev = [ 16 | "pylint>=3.0.0" 17 | ] 18 | -------------------------------------------------------------------------------- /holiday_llm.prompt: -------------------------------------------------------------------------------- 1 | 你将收到一个中国节假日的放假安排, 它包含了节日名, 放假日期和调休日期. 2 | 3 | 数据格式为: 节日名;放假日期;补班日期 4 | 如果没有补班, 可以省略为: 节日名;放假日期 5 | 6 | 其中, 日期格式形如 Y.M.D,Y.M.D-Y.M.D 7 | 用“,”拼接多个日期, 并使用“-”表示日期区间 8 | 9 | 例如: 10 | 11 | 输入 12 | 2013年春节: 2月9日至15日放假调休,共7天。2月16日(星期六)、2月17日(星期日)上班。 13 | 输出 14 | 春节;2013.2.9-2013.2.15;2013.2.16,2013.2.17 15 | 16 | 输入 17 | 2023年元旦: 2022年12月31日至2023年1月2日放假调休,共3天。 18 | 输出 19 | 元旦;2022.12.31-2023.1.2 20 | 21 | 输入 22 | 2025年国庆节、中秋节: 10月1日(周三)至8日(周三)放假调休,共8天。9月28日(周日)、10月11日(周六)上班。 23 | 输出 24 | 国庆节、中秋节;2025.10.1-2025.10.8;2025.9.28,2025.10.11 25 | 26 | 根据上面的例子完成下面这个数据的处理. 你应该仅输出最终结果, 必须只有一行, 格式和上面一致. 27 | 28 | 输入 29 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | [*] 5 | end_of_line = lf 6 | insert_final_newline = true 7 | 8 | # Matches multiple files with brace expansion notation 9 | [{*.go,go.mod,go.sum}] 10 | charset = utf-8 11 | indent_style = tab 12 | indent_size = 4 13 | trim_trailing_whitespace = true 14 | 15 | [*.py] 16 | charset = utf-8 17 | indent_style = space 18 | indent_size = 4 19 | trim_trailing_whitespace = true 20 | 21 | [*.{js,html,css,json,yml}] 22 | charset = utf-8 23 | indent_style = space 24 | indent_size = 2 25 | trim_trailing_whitespace = true 26 | 27 | [*.{md,txt}] 28 | trim_trailing_whitespace = false 29 | -------------------------------------------------------------------------------- /data/2017.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 4/10/2022 2 | // and manually checked on 4/11/2022 3 | // source: http://www.gov.cn/zhengce/content/2016-12/01/content_5141603.htm 4 | 5 | 元旦;2016.12.31-2017.1.2; // 1月1日放假,1月2日(星期一)补休。 6 | 春节;2017.1.27-2017.2.2;2017.1.22,2017.2.4 // 1月27日至2月2日放假调休,共7天。1月22日(星期日)、2月4日(星期六)上班。 7 | 清明节;2017.4.2-2017.4.4;2017.4.1 // 4月2日至4日放假调休,共3天。4月1日(星期六)上班。 8 | 劳动节;2017.4.29-2017.5.1; // 5月1日放假,与周末连休。 9 | 端午节;2017.5.28-2017.5.30;2017.5.27 // 5月28日至30日放假调休,共3天。5月27日(星期六)上班。 10 | 中秋节、国庆节;2017.10.1-2017.10.8;2017.9.30 // 10月1日至8日放假调休,共8天。9月30日(星期六)上班。 11 | -------------------------------------------------------------------------------- /data/2020.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 3/27/2022 2 | // and manually checked on 3/27/2022 3 | // source: http://www.gov.cn/zhengce/content/2019-11/21/content_5454164.htm 4 | 5 | 元旦;2020.1.1; // 2020年1月1日放假,共1天。 6 | 春节;2020.1.24-2020.1.30;2020.1.19,2020.2.1 // 1月24日至30日放假调休,共7天。1月19日(星期日)、2月1日(星期六)上班。 7 | 清明节;2020.4.4-2020.4.6; // 4月4日至6日放假调休,共3天。 8 | 劳动节;2020.5.1-2020.5.5;2020.4.26,2020.5.9 // 5月1日至5日放假调休,共5天。4月26日(星期日)、5月9日(星期六)上班。 9 | 端午节;2020.6.25-2020.6.27;2020.6.28 // 6月25日至27日放假调休,共3天。6月28日(星期日)上班。 10 | 国庆节、中秋节;2020.10.1-2020.10.8;2020.9.27,2020.10.10 // 10月1日至8日放假调休,共8天。9月27日(星期日)、10月10日(星期六)上班。 11 | -------------------------------------------------------------------------------- /data/2023.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 12/11/2022 2 | // and manually checked on 12/27/2022 3 | // source: http://www.gov.cn/zhengce/content/2022-12/08/content_5730844.htm 4 | 5 | 元旦;2022.12.31-2023.1.2; // 2022年12月31日至2023年1月2日放假调休,共3天。 6 | 春节;2023.1.21-2023.1.27;2023.1.28,2023.1.29 // 1月21日至27日放假调休,共7天。1月28日(星期六)、1月29日(星期日)上班。 7 | 清明节;2023.4.5; // 4月5日放假,共1天。 8 | 劳动节;2023.4.29-2023.5.3;2023.4.23,2023.5.6 // 4月29日至5月3日放假调休,共5天。4月23日(星期日)、5月6日(星期六)上班。 9 | 端午节;2023.6.22-2023.6.24;2023.6.25 // 6月22日至24日放假调休,共3天。6月25日(星期日)上班。 10 | 中秋节、国庆节;2023.9.29-2023.10.6;2023.10.7,2023.10.8 // 9月29日至10月6日放假调休,共8天。10月7日(星期六)、10月8日(星期日)上班。 11 | -------------------------------------------------------------------------------- /data/2025.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 9/3/2025 2 | // and manually checked on // BY AI 3 | // source: https://www.gov.cn/zhengce/content/202411/content_6986382.htm 4 | 5 | 元旦;2025.1.1 // 1月1日(周三)放假1天,不调休。 6 | 春节;2025.1.28-2025.2.4;2025.1.26,2025.2.8 // 1月28日(农历除夕、周二)至2月4日(农历正月初七、周二)放假调休,共8天。1月26日(周日)、2月8日(周六)上班。 7 | 清明节;2025.4.4-2025.4.6 // 4月4日(周五)至6日(周日)放假,共3天。 8 | 劳动节;2025.5.1-2025.5.5;2025.4.27 // 5月1日(周四)至5日(周一)放假调休,共5天。4月27日(周日)上班。 9 | 端午节;2025.5.31-2025.6.2 // 5月31日(周六)至6月2日(周一)放假,共3天。 10 | 国庆节、中秋节;2025.10.1-2025.10.8;2025.9.28,2025.10.11 // 10月1日(周三)至8日(周三)放假调休,共8天。9月28日(周日)、10月11日(周六)上班。 -------------------------------------------------------------------------------- /data/2015.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 4/10/2022 2 | // and manually checked on 4/11/2022 3 | // source: http://www.gov.cn/zhengce/content/2014-12/16/content_9302.htm 4 | 5 | 元旦;2015.1.1-2015.1.3;2015.1.4 // 1月1日至3日放假调休,共3天。1月4日(星期日)上班。 6 | 春节;2015.2.18-2015.2.24;2015.2.15,2015.2.28 // 2月18日至24日放假调休,共7天。2月15日(星期日)、2月28日(星期六)上班。 7 | 清明节;2015.4.4-2015.4.6; // 4月5日放假,4月6日(星期一)补休。 8 | 劳动节;2015.5.1-2015.5.3; // 5月1日放假,与周末连休。 9 | 端午节;2015.6.20-2015.6.22; // 6月20日放假,6月22日(星期一)补休。 10 | 中秋节;2015.9.27; // 9月27日放假。 11 | 国庆节;2015.10.1-2015.10.7;2015.10.10 // 10月1日至7日放假调休,共7天。10月10日(星期六)上班。 12 | -------------------------------------------------------------------------------- /data/2014.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 4/10/2022 2 | // and manually checked on 4/11/2022 3 | // source: http://www.gov.cn/zhengce/content/2014-01/02/content_1194.htm 4 | 5 | 元旦;2014.1.1; // 1月1日放假1天。 6 | 春节;2014.1.31-2014.2.6;2014.1.26,2014.2.8 // 1月31日至2月6日放假调休,共7天。1月26日(星期日)、2月8日(星期六)上班。 7 | 清明节;2014.4.5-2014.4.7; // 4月5日放假,4月7日(星期一)补休。 8 | 劳动节;2014.5.1-2014.5.3;2014.5.4 // 5月1日至3日放假调休,共3天。5月4日(星期日)上班。 9 | 端午节;2014.5.31-2014.6.2; // 6月2日放假,与周末连休。 10 | 中秋节;2014.9.6-2014.9.8; // 9月8日放假,与周末连休。 11 | 国庆节;2014.10.1-2014.10.7;2014.9.28,2014.10.11 // 10月1日至7日放假调休,共7天。9月28日(星期日)、10月11日(星期六)上班。 12 | -------------------------------------------------------------------------------- /data/2019.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 3/27/2022 2 | // and manually checked on 3/27/2022 3 | // source: http://www.gov.cn/zhengce/content/2018-12/06/content_5346276.htm 4 | 5 | 元旦;2018.12.30-2019.1.1;2018.12.19 // 2018年12月30日至2019年1月1日放假调休,共3天。2018年12月29日(星期六)上班。 6 | 春节;2019.2.4-2019.2.10;2019.2.2,2019.2.3 // 2月4日至10日放假调休,共7天。2月2日(星期六)、2月3日(星期日)上班。 7 | 清明节;2019.4.5-2019.4.7; // 4月5日放假,与周末连休。 8 | 劳动节;2019.5.1; // 5月1日放假。 9 | 端午节;2019.6.7-2019.6.9; // 6月7日放假,与周末连休。 10 | 中秋节;2019.9.13-2019.9.15; // 9月13日放假,与周末连休。 11 | 国庆节;2019.10.1-2019.10.7;2019.9.29,2019.10.12 // 10月1日至7日放假调休,共7天。9月29日(星期日)、10月12日(星期六)上班。 12 | -------------------------------------------------------------------------------- /data/2016.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 4/10/2022 2 | // and manually checked on 4/11/2022 3 | // source: http://www.gov.cn/zhengce/content/2015-12/10/content_10394.htm 4 | 5 | 元旦;2016.1.1-2016.1.3; // 1月1日放假,与周末连休。 6 | 春节;2016.2.7-2016.2.13;2016.2.6,2016.2.14 // 2月7日至13日放假调休,共7天。2月6日(星期六)、2月14日(星期日)上班。 7 | 清明节;2016.4.2-2016.4.4; // 4月4日放假,与周末连休。 8 | 劳动节;2016.4.30-2016.5.2; // 5月1日放假,5月2日(星期一)补休。 9 | 端午节;2016.6.9-2016.6.11;2016.6.12 // 6月9日至11日放假调休,共3天。6月12日(星期日)上班。 10 | 中秋节;2016.9.15-2016.9.17;2016.9.18 // 9月15日至17日放假调休,共3天。9月18日(星期日)上班。 11 | 国庆节;2016.10.1-2016.10.7;2016.10.8,2016.10.9 // 10月1日至7日放假调休,共7天。10月8日(星期六)、10月9日(星期日)上班。 12 | -------------------------------------------------------------------------------- /data/2018.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 3/27/2022 2 | // and manually checked on 3/27/2022 3 | // source: http://www.gov.cn/zhengce/content/2017-11/30/content_5243579.htm 4 | 5 | 元旦;2017.12.30-2018.1.1; // 1月1日放假,与周末连休。 6 | 春节;2018.2.15-2018.2.21;2018.2.11,2018.2.24 // 2月15日至21日放假调休,共7天。2月11日(星期日)、2月24日(星期六)上班。 7 | 清明节;2018.4.5-2018.4.7;2018.4.8 // 4月5日至7日放假调休,共3天。4月8日(星期日)上班。 8 | 劳动节;2018.4.29-2018.5.1;2018.4.28 // 4月29日至5月1日放假调休,共3天。4月28日(星期六)上班。 9 | 端午节;2018.6.16-2018.6.18; // 6月18日放假,与周末连休。 10 | 中秋节;2018.9.22-2018.9.24; // 9月24日放假,与周末连休。 11 | 国庆节;2018.10.1-2018.10.7;2018.9.29,2018.9.30 // 10月1日至7日放假调休,共7天。9月29日(星期六)、9月30日(星期日)上班。 12 | -------------------------------------------------------------------------------- /data/2021.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 3/27/2022 2 | // and manually checked on 3/27/2022 3 | // source: http://www.gov.cn/zhengce/content/2020-11/25/content_5564127.htm 4 | 5 | 元旦;2021.1.1-2021.1.3; // 2021年1月1日至3日放假,共3天。 6 | 春节;2021.2.11-2021.2.17;2021.2.7,2021.2.20 // 2月11日至17日放假调休,共7天。2月7日(星期日)、2月20日(星期六)上班。 7 | 清明节;2021.4.3-2021.4.5; // 4月3日至5日放假调休,共3天。 8 | 劳动节;2021.5.1-2021.5.5;2021.4.25,2021.5.8 // 5月1日至5日放假调休,共5天。4月25日(星期日)、5月8日(星期六)上班。 9 | 端午节;2021.6.12-2021.6.14; // 6月12日至14日放假,共3天。 10 | 中秋节;2021.9.19-2021.9.21;2021.9.18 // 9月19日至21日放假调休,共3天。9月18日(星期六)上班。 11 | 国庆节;2021.10.1-2021.10.7;2021.9.26,2021.10.9 // 10月1日至7日放假调休,共7天。9月26日(星期日)、10月9日(星期六)上班。 12 | -------------------------------------------------------------------------------- /data/2022.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 3/27/2022 2 | // and manually checked on 3/27/2022 3 | // source: http://www.gov.cn/zhengce/content/2021-10/25/content_5644835.htm 4 | 5 | 元旦;2022.1.1-2022.1.3; // 2022年1月1日至3日放假,共3天。 6 | 春节;2022.1.31-2022.2.6;2022.1.29,2022.1.30 // 1月31日至2月6日放假调休,共7天。1月29日(星期六)、1月30日(星期日)上班。 7 | 清明节;2022.4.3-2022.4.5;2022.4.2 // 4月3日至5日放假调休,共3天。4月2日(星期六)上班。 8 | 劳动节;2022.4.30-2022.5.4;2022.4.24,2022.5.7 // 4月30日至5月4日放假调休,共5天。4月24日(星期日)、5月7日(星期六)上班。 9 | 端午节;2022.6.3-2022.6.5; // 6月3日至5日放假,共3天。 10 | 中秋节;2022.9.10-2022.9.12; // 9月10日至12日放假,共3天。 11 | 国庆节;2022.10.1-2022.10.7;2022.10.8,2022.10.9 // 10月1日至7日放假调休,共7天。10月8日(星期六)、10月9日(星期日)上班。 12 | -------------------------------------------------------------------------------- /data/2024.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 11/5/2023 2 | // and manually checked on 11/5/2023 3 | // source: https://www.gov.cn/zhengce/content/202310/content_6911527.htm 4 | 5 | 元旦;2023.12.30-2024.1.1 // 1月1日放假,与周末连休。 6 | 春节;2024.2.10-2024.2.17;2024.2.4,2024.2.18 // 2月10日至17日放假调休,共8天。2月4日(星期日)、2月18日(星期日)上班。鼓励各单位结合带薪年休假等制度落实,安排职工在除夕(2月9日)休息。 7 | 清明节;2024.4.4-2024.4.6;2024.4.7 // 4月4日至6日放假调休,共3天。4月7日(星期日)上班。 8 | 劳动节;2024.5.1-2024.5.5;2024.4.28,2024.5.11 // 5月1日至5日放假调休,共5天。4月28日(星期日)、5月11日(星期六)上班。 9 | 端午节;2024.6.8-2024.6.10 // 6月10日放假,与周末连休。 10 | 中秋节;2024.9.15-2024.9.17;2024.9.14 // 9月15日至17日放假调休,共3天。9月14日(星期六)上班。 11 | 国庆节;2024.10.1-2024.10.7;2024.9.29,2024.10.12 // 10月1日至7日放假调休,共7天。9月29日(星期日)、10月12日(星期六)上班。 12 | -------------------------------------------------------------------------------- /data/2026.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 11/17/2025 2 | // and manually checked on // BY AI 3 | // source: https://www.gov.cn/zhengce/content/202511/content_7047090.htm 4 | 5 | 元旦;2026.1.1-2026.1.3;2026.1.4 // 1月1日(周四)至3日(周六)放假调休,共3天。1月4日(周日)上班。 6 | 春节;2026.2.15-2026.2.23;2026.2.14,2026.2.28 // 2月15日(农历腊月二十八、周日)至23日(农历正月初七、周一)放假调休,共9天。2月14日(周六)、2月28日(周六)上班。 7 | 清明节;2026.4.4-2026.4.6 // 4月4日(周六)至6日(周一)放假,共3天。 8 | 劳动节;2026.5.1-2026.5.5;2026.5.9 // 5月1日(周五)至5日(周二)放假调休,共5天。5月9日(周六)上班。 9 | 端午节;2026.6.19-2026.6.21 // 6月19日(周五)至21日(周日)放假,共3天。 10 | 中秋节;2026.9.25-2026.9.27 // 9月25日(周五)至27日(周日)放假,共3天。 11 | 国庆节;2026.10.1-2026.10.7;2026.9.20,2026.10.10 // 10月1日(周四)至7日(周三)放假调休,共7天。9月20日(周日)、10月10日(周六)上班。 -------------------------------------------------------------------------------- /data/2013.txt: -------------------------------------------------------------------------------- 1 | // automatically generated on 4/10/2022 2 | // and manually checked on 4/11/2022 3 | // source: http://www.gov.cn/zhengce/content/2012-12/10/content_1353.htm 4 | 5 | 元旦;2013.1.1-2013.1.3;2013.1.5,2013.1.6 // 1月1日至3日放假调休,共3天。1月5日(星期六)、1月6日(星期日)上班。 6 | 春节;2013.2.9-2013.2.15;2013.2.16,2013.2.17 // 2月9日至15日放假调休,共7天。2月16日(星期六)、2月17日(星期日)上班。 7 | 清明节;2013.4.4-2013.4.6;2013.4.7 // 4月4日至6日放假调休,共3天。4月7日(星期日)上班。 8 | 劳动节;2013.4.29-2013.5.1;2013.4.27,2013.4.28 // 4月29日至5月1日放假调休,共3天。4月27日(星期六)、4月28日(星期日)上班。 9 | 端午节;2013.6.10-2013.6.12;2013.6.8,2013.6.9 // 6月10日至12日放假调休,共3天。6月8日(星期六)、6月9日(星期日)上班。 10 | 中秋节;2013.9.19-2013.9.21;2013.9.22 // 9月19日至21日放假调休,共3天。9月22日(星期日)上班。 11 | 国庆节;2013.10.1-2013.10.7;2013.9.29,2013.10.12 // 10月1日至7日放假调休,共7天。9月29日(星期日)、10月12日(星期六)上班。 12 | -------------------------------------------------------------------------------- /crawler.http: -------------------------------------------------------------------------------- 1 | POST https://sousuoht.www.gov.cn/athena/forward/2B22E8E39E850E17F95A016A74FCB6B673336FA8B6FEC0E2955907EF9AEE06BE 2 | Content-Type: application/json;charset=UTF-8 3 | Athenaappname: %E5%9B%BD%E7%BD%91%E6%90%9C%E7%B4%A2 4 | Athenaappkey: R6kU1sKz%2BSHMWevvn8zRHAGJOwe6o53KEf7v0BJPVWY0Vxb4gIMCWDshQDWxw2Ua5CtSpEalXVlVzlj4mulMw6lnQzuqTEDDRC833wtXJyC%2F1kPbME1oCijkQOluRhbXZj3iRK1nXCzq5Sw%2F%2B2XbJbm%2BFEPLZRwoNNeYoOLcueg%3D 5 | 6 | { 7 | "code": "17da70961a7", 8 | "historySearchWords": [ 9 | "节假日安排" 10 | ], 11 | "dataTypeId": "107", 12 | "orderBy": "time", 13 | "searchBy": "title", 14 | "appendixType": "", 15 | "granularity": "ALL", 16 | "trackTotalHits": true, 17 | "beginDateTime": "", 18 | "endDateTime": "", 19 | "isSearchForced": 0, 20 | "filters": [], 21 | "pageNo": 1, 22 | "pageSize": 10, 23 | "customFilter": { 24 | "operator": "and", 25 | "properties": [] 26 | }, 27 | "searchWord": "节假日安排" 28 | } 29 | -------------------------------------------------------------------------------- /parser/Main.hs: -------------------------------------------------------------------------------- 1 | module Main where 2 | 3 | import Data.Function (on) 4 | import Data.List (isPrefixOf, sortBy) 5 | import Main.Base 6 | import Main.Input 7 | import Main.Output 8 | import System.Directory (listDirectory) 9 | import System.FilePath (()) 10 | 11 | -- Parse holiday data 12 | -- Generate ics files 13 | main :: IO () 14 | main = do 15 | -- read files 16 | filesInDir <- listDirectory "./data" 17 | let files = filter ("20" `isPrefixOf`) filesInDir 18 | contents <- mapM (readFile . ("./data" )) files 19 | 20 | -- parse data 21 | let calendarYearly = zipWith parseFile files contents 22 | debug calendarYearly 23 | 24 | -- write files 25 | let calendar = calendarYearly >>= join 26 | writeFile "./docs/index.html" $ generate calendar Both 27 | 28 | writeFile "./docs/main.ics" $ generate calendar Both 29 | writeFile "./docs/rest.ics" $ generate calendar Rest 30 | writeFile "./docs/work.ics" $ generate calendar Work 31 | 32 | -- Log holiday data ordered by each year 33 | debug :: [Yearly] -> IO () 34 | debug yearly = 35 | let orderByYear = sortBy (compare `on` year) yearly 36 | printByDate holiday = do 37 | putStrLn $ "\nYear " ++ year holiday 38 | mapM_ print $ sortByDate $ join holiday 39 | in mapM_ printByDate orderByYear 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 中国大陆节假日安排 · 日历订阅

Chinese Holidays Calendar 2 | 3 | Calendar subscription link for public holidays in mainland China 4 | 5 | > Calendar data updated at 9:21 on December 17, 2025 6 | 7 | ## Demo 8 | 9 | ![demo](./docs/readme/demo.png) 10 | 11 | ## 如何订阅 12 | 13 | ### iOS / iPadOS 14 | 15 | 日历 - 添加日历 - 添加订阅日历 - 输入链接 16 | 「 [https://ical.muhan.org](https://ical.muhan.org) 」 17 | 18 | ![on iOS](./docs/readme/ios.jpg) 19 | 20 | ### macOS 21 | 22 | 日历 - 文件 - 新建日历订阅 - 输入链接 23 | 「 [https://ical.muhan.org](https://ical.muhan.org) 」 24 | 25 | ![on macOS](./docs/readme/macos.png) 26 | 27 | ## 为补班添加不同的颜色 28 | 29 | 分别订阅 30 | - 假期:「 [https://ical.muhan.org/rest.ics](https://ical.muhan.org/rest.ics) 」 31 | - 补班:「 [https://ical.muhan.org/work.ics](https://ical.muhan.org/work.ics) 」 32 | 33 | 给他们分配不同的颜色吧~ 34 | 35 | ![overview](./docs/readme/overview.png) 36 | 37 | ## iOS 自动节假日闹钟 38 | 39 | 在周一至周五、调休补班日期自动打开标签内容包含「工作日闹钟」的闹钟 40 | 在周六、周日以及节假日假期自动关闭标签内容包含「工作日闹钟」的闹钟 41 | 42 | [戳此](https://www.icloud.com/shortcuts/71ddab11837b408188821c3d992e8e4c) 导入 iOS 快捷指令脚本,在「快捷指令」App 中设定一个每天凌晨运行的自动化任务吧~ 43 | 44 | ## 维护者 45 | 46 | [@muhac](https://github.com/muhac) 47 | 48 | Buy Me A Coffee 49 | 50 | ![Star History Chart](https://api.star-history.com/svg?repos=muhac/chinese-holidays-calendar&type=Date) 51 | -------------------------------------------------------------------------------- /parser/Main/Output.hs: -------------------------------------------------------------------------------- 1 | module Main.Output where 2 | 3 | import Data.Time (defaultTimeLocale, formatTime) 4 | import Data.UUID (fromWords, toString) 5 | import Main.Base 6 | import Numeric (readHex) 7 | import Text.Printf (printf) 8 | 9 | -- Generate ics files 10 | generate :: [Holiday] -> Status -> String 11 | generate dates status = unlines [icsHead status, icsBody, icsTail] 12 | where 13 | icsBody = unlines $ map icsEvent events 14 | events = sortByDate $ filterByStatus status dates 15 | 16 | -- Standard ics format for the beginning 17 | icsHead :: Status -> String 18 | icsHead status = 19 | unlines 20 | [ "BEGIN:VCALENDAR" 21 | , "VERSION:2.0" 22 | , "PRODID:-//Rank Technology//Chinese Holidays//EN" 23 | , "X-WR-CALNAME:" ++ titleStatus status 24 | ] 25 | 26 | -- Standard ics format for each event 27 | icsEvent :: Holiday -> String 28 | icsEvent (Holiday (Group status name) (Date index total time)) = 29 | unlines 30 | [ "BEGIN:VEVENT" 31 | , "UID:" ++ uuid 32 | , "DTSTART;VALUE=DATE:" ++ formatTime defaultTimeLocale "%Y%m%d" time 33 | , "SUMMARY:" ++ name ++ show status 34 | , "DESCRIPTION:" ++ show status ++ printf "第%d天 / 共%d天" index total 35 | , "END:VEVENT" 36 | ] 37 | where 38 | uuid = toString $ fromWords a b c d 39 | a = fst . head . readHex $ formatTime defaultTimeLocale "%Y%m%d" time 40 | b = fromIntegral $ shift index + total 41 | c = fromIntegral $ shift $ indexStatus status 42 | d = 0xa95511fe -- 955.WLB 43 | shift = (*) 0x10000 44 | 45 | -- Standard ics format for the ending 46 | icsTail :: String 47 | icsTail = "END:VCALENDAR" 48 | -------------------------------------------------------------------------------- /.github/workflows/cd.yml: -------------------------------------------------------------------------------- 1 | name: Continuous Delivery 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: "0 0 1/16 * *" 7 | push: 8 | branches: 9 | - "**" 10 | 11 | jobs: 12 | main: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - name: Checkout this repository 17 | uses: actions/checkout@v4 18 | with: 19 | ref: ${{ github.head_ref }} 20 | fetch-depth: 2 21 | 22 | - name: Setup Python environment 23 | uses: actions/setup-python@v5 24 | with: 25 | python-version: "3.12" 26 | 27 | - name: Setup uv 28 | uses: astral-sh/setup-uv@v4 29 | 30 | - name: Install dependencies (uv) 31 | run: uv sync --locked 32 | 33 | - name: Run crawler script 34 | shell: bash 35 | run: uv run python crawler.py 36 | 37 | - name: Call LLM completion 38 | env: 39 | LANGSMITH_TRACING: "true" 40 | LANGSMITH_ENDPOINT: "https://api.smith.langchain.com" 41 | LANGSMITH_PROJECT: "chinese-holidays-calendar" 42 | LANGSMITH_API_KEY: ${{ secrets.LANGSMITH_APIKEY }} 43 | OPENAI_API_KEY: ${{ secrets.OPENAI_APIKEY }} 44 | OPENAI_MODEL: "gpt-4.1-mini" 45 | run: uv run python holiday_llm.py 46 | continue-on-error: true 47 | 48 | - name: Setup Haskell and Cabal 49 | uses: haskell-actions/setup@v2 50 | with: 51 | ghc-version: "9.6" 52 | cabal-version: "3.10" 53 | 54 | - name: Build parser 55 | run: cabal build 56 | 57 | - name: Generate ICS files 58 | run: cabal run 59 | 60 | - name: Commit changes 61 | if: github.ref == 'refs/heads/main' 62 | uses: stefanzweifel/git-auto-commit-action@v5 63 | with: 64 | file_pattern: README.md data/* docs/* 65 | commit_message: update calendar data automatically 66 | commit_user_name: Muhan Li 67 | commit_user_email: 77625954+muhav@users.noreply.github.com 68 | commit_author: Muhan Li <77625954+muhav@users.noreply.github.com> 69 | -------------------------------------------------------------------------------- /parser/Main/Input.hs: -------------------------------------------------------------------------------- 1 | module Main.Input where 2 | 3 | import Data.List (uncons) 4 | import Data.List.Split (splitOn) 5 | import Data.Maybe (mapMaybe) 6 | import Data.Time (UTCTime, addUTCTime, defaultTimeLocale, formatTime, parseTimeOrError) 7 | import Main.Base 8 | import System.FilePath (takeBaseName) 9 | 10 | -- Parse holiday data 11 | -- Organized by year 12 | parseFile :: FilePath -> String -> Yearly 13 | parseFile file content = Yearly yearName daysRest daysWork 14 | where 15 | yearName = takeBaseName file 16 | daysRest = parse content Rest 17 | daysWork = parse content Work 18 | 19 | -- Convert data to Date 20 | parse :: String -> Status -> [Holiday] 21 | parse content status = zip names dates >>= uncurry toHolidays 22 | where 23 | names = Group status . rawName <$> raw 24 | dates = parseDates . rawDate status <$> raw 25 | raw = parseRaw content 26 | 27 | -- Parse raw data from file 28 | -- Format: name;rest;work 29 | parseRaw :: String -> [HolidayRaw] 30 | parseRaw content = mapMaybe (toHolidayRaw . splitOn ";") eventsRaw 31 | where 32 | eventsRaw = mapMaybe (fmap fst . uncons . words) uncomment 33 | uncomment = mapMaybe (fmap fst . uncons . splitOn "//") $ lines content 34 | 35 | -- Expand date ranges to UTCTime list 36 | -- Support multiple date ranges separated by comma 37 | parseDates :: String -> [Date] 38 | parseDates ranges = zipWith3 Date [1 ..] (repeat $ length dates) dates 39 | where 40 | dates = splitOn "," ranges >>= parseDate . splitOn "-" 41 | 42 | -- Parse date range 43 | -- 1. like "2020.1.1" 44 | -- 2. like "2020.1.1-2020.1.3" 45 | parseDate :: [String] -> [UTCTime] 46 | parseDate [""] = [] 47 | parseDate [single] = [parseTime single] 48 | parseDate [start, end] 49 | | start == end = parseDate [end] 50 | | otherwise = first : parseDate [second, end] 51 | where 52 | first = parseTime start 53 | second = printTime $ addUTCTime day first 54 | day = 24 * 60 * 60 55 | parseDate _ = [] 56 | 57 | -- Parse date in format "2020.1.1" 58 | parseTime :: String -> UTCTime 59 | parseTime = parseTimeOrError True defaultTimeLocale "%Y.%-m.%-d" 60 | 61 | -- Format date in format "2020.1.1" 62 | printTime :: UTCTime -> String 63 | printTime = formatTime defaultTimeLocale "%Y.%-m.%-d" 64 | -------------------------------------------------------------------------------- /holiday_llm.py: -------------------------------------------------------------------------------- 1 | """用 LLM 处理放假安排的数据""" 2 | 3 | import os 4 | import re 5 | 6 | import openai 7 | from langsmith.wrappers import wrap_openai 8 | from langsmith import traceable 9 | 10 | model = os.environ.get("OPENAI_MODEL") 11 | key = os.environ.get("OPENAI_API_KEY") 12 | client = wrap_openai(openai.Client(api_key=key)) 13 | 14 | SYSTEM = "你需要把自然语言处理成格式化内容." 15 | PROMPT_PATH = os.path.join(os.path.dirname(__file__), "holiday_llm.prompt") 16 | with open(PROMPT_PATH, encoding="utf-8") as _f: 17 | PROMPT = _f.read() 18 | 19 | 20 | def main(): 21 | """更新节假日信息文件""" 22 | for file in os.listdir('./data'): 23 | if file.endswith('.txt'): 24 | with open(f'./data/{file}', encoding='utf-8') as f_obj: 25 | content = f_obj.read() 26 | 27 | if "DATA NOT VERIFIED" not in content: 28 | continue 29 | 30 | data = parse(file[:4], content.split('\n')) 31 | data = '\n'.join(data).replace("DATA NOT VERIFIED", "// BY AI") 32 | 33 | with open(f'./data/{file}', 'w', encoding='utf-8') as f_obj: 34 | f_obj.write(data) 35 | 36 | 37 | def parse(year: str, lines: list[str]) -> list[str]: 38 | """按行处理节假日信息""" 39 | print(year) 40 | 41 | padding = max(len(line.split('//')[0]) for line in lines) 42 | 43 | for i, line in enumerate(lines): 44 | if len(line.split(';')) < 2: 45 | continue 46 | 47 | name = line.split(';')[0] 48 | text = line.split('//')[-1] 49 | 50 | query = f"{year}年{name}: {text}" 51 | value = get_response(query).strip() 52 | 53 | if value and '\n' not in value and re.search(r";\d{4}\.\d{1,2}\.\d{1,2}", value): 54 | lines[i] = f"{value:{padding}}// {text}" 55 | 56 | print(lines[i]) 57 | 58 | return lines 59 | 60 | 61 | @traceable 62 | def get_response(query: str) -> str: 63 | """获取 LLM 的处理结果""" 64 | try: 65 | completion = client.chat.completions.create( 66 | model=model, 67 | messages=[ 68 | {"role": "system", "content": SYSTEM}, 69 | {"role": "user", "content": PROMPT + query}, 70 | ], 71 | ) 72 | return completion.choices[0].message.content 73 | 74 | except openai.APIConnectionError as e: 75 | print(e, query) 76 | return "" 77 | 78 | 79 | if __name__ == '__main__': 80 | main() 81 | -------------------------------------------------------------------------------- /parser/Main/Base.hs: -------------------------------------------------------------------------------- 1 | module Main.Base where 2 | 3 | import Data.Function (on) 4 | import Data.List (sortBy) 5 | import Data.Time (UTCTime, defaultTimeLocale, formatTime) 6 | 7 | data Status = Both | Rest | Work deriving (Enum) 8 | 9 | instance Show Status where 10 | show Both = "" 11 | show Rest = "假期" 12 | show Work = "补班" 13 | 14 | -- Title of output ics file 15 | titleStatus :: Status -> String 16 | titleStatus Both = "中国节假日安排" 17 | titleStatus kind = "中国节假日安排(" ++ show kind ++ ")" 18 | 19 | -- Index of input txt file 20 | indexStatus :: Status -> Int 21 | indexStatus Both = 0 22 | indexStatus Rest = 1 23 | indexStatus Work = 2 24 | 25 | instance Eq Status where 26 | (==) = (==) `on` indexStatus 27 | 28 | data Yearly = Yearly 29 | { year :: String 30 | , rest :: [Holiday] 31 | , work :: [Holiday] 32 | } 33 | 34 | join :: Yearly -> [Holiday] 35 | join y = rest y ++ work y 36 | 37 | data HolidayRaw = HolidayRaw 38 | { rawName :: String 39 | , rawRest :: String 40 | , rawWork :: String 41 | } 42 | 43 | rawDate :: Status -> HolidayRaw -> String 44 | rawDate Rest = rawRest 45 | rawDate Work = rawWork 46 | rawDate _ = return "" 47 | 48 | toHolidayRaw :: [String] -> Maybe HolidayRaw 49 | toHolidayRaw [n, r, w] = Just $ HolidayRaw n r w 50 | toHolidayRaw [n, r] = toHolidayRaw [n, r, ""] 51 | toHolidayRaw _ = Nothing 52 | 53 | data Holiday = Holiday 54 | { holidayGroup :: Group 55 | , holidayDate :: Date 56 | } 57 | 58 | instance Show Holiday where 59 | show (Holiday group date) = unwords [show date, show group] 60 | 61 | toHolidays :: Group -> [Date] -> [Holiday] 62 | toHolidays group dates = Holiday group <$> dates 63 | 64 | data Group = Group 65 | { holidayStatus :: Status 66 | , holidayName :: String 67 | } 68 | 69 | instance Show Group where 70 | show (Group status name) = unwords [name, show status] 71 | 72 | data Date = Date 73 | { holidayIndex :: Int 74 | , holidayTotal :: Int 75 | , holidayTime :: UTCTime 76 | } 77 | 78 | instance Show Date where 79 | show (Date index total time) = 80 | unwords 81 | [ formatTime defaultTimeLocale "%Y-%m-%d" time 82 | , show index ++ "/" ++ show total 83 | ] 84 | 85 | sortByDate :: [Holiday] -> [Holiday] 86 | sortByDate = sortBy (compare `on` holidayTime . holidayDate) 87 | 88 | filterByStatus :: Status -> [Holiday] -> [Holiday] 89 | filterByStatus Both = id 90 | filterByStatus kind = filter ((== kind) . holidayStatus . holidayGroup) 91 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | 131 | # MacOs trash 132 | .DS_Store 133 | .idea/ 134 | 135 | # Haskell 136 | dist-newstyle/ 137 | .vscode/ 138 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Continuous Integration 2 | 3 | on: 4 | push: 5 | branches: 6 | - "**" 7 | pull_request: 8 | branches: 9 | - "**" 10 | 11 | jobs: 12 | 13 | llm: 14 | name: LLM Service 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | 20 | - name: Call OpenAI API 21 | env: 22 | OPENAI_API_KEY: ${{ secrets.OPENAI_APIKEY }} 23 | run: | 24 | curl https://api.openai.com/v1/chat/completions \ 25 | -o response.json \ 26 | -H "Content-Type: application/json" \ 27 | -H "Authorization: Bearer $OPENAI_API_KEY" \ 28 | -d '{ 29 | "model": "gpt-4.1-mini", 30 | "messages": [ 31 | {"role": "system", "content": "You are a helpful assistant."}, 32 | {"role": "user", "content": "给我写一首五言绝句"} 33 | ] 34 | }' 35 | 36 | - name: Show response 37 | run: cat response.json | jq . || cat response.json 38 | 39 | crawler: 40 | name: Crawler Dry Run 41 | runs-on: ubuntu-latest 42 | strategy: 43 | matrix: 44 | python-version: [ "3.11", "3.12", "3.13" ] 45 | 46 | steps: 47 | - uses: actions/checkout@v4 48 | 49 | - name: Setup Python ${{ matrix.python-version }} 50 | uses: actions/setup-python@v5 51 | with: 52 | python-version: ${{ matrix.python-version }} 53 | 54 | - name: Setup uv 55 | uses: astral-sh/setup-uv@v4 56 | 57 | - name: Install dependencies 58 | run: uv sync --locked 59 | 60 | - name: Run crawler script 61 | shell: bash 62 | run: uv run python crawler.py 63 | 64 | parser: 65 | name: Parser Dry Run 66 | runs-on: ubuntu-latest 67 | 68 | strategy: 69 | matrix: 70 | ghc: [ "9.6", "9.8" ] 71 | cabal: [ "3.10", "latest" ] 72 | include: 73 | - ghc: "9.2.8" 74 | cabal: "3.10.1.0" 75 | 76 | steps: 77 | - uses: actions/checkout@v4 78 | 79 | - name: Setup Haskell ${{ matrix.ghc }} with Cabal ${{ matrix.cabal }} 80 | uses: haskell-actions/setup@v2 81 | with: 82 | ghc-version: ${{ matrix.ghc }} 83 | cabal-version: ${{ matrix.cabal }} 84 | 85 | - name: Configure the build 86 | run: | 87 | cabal configure --enable-tests --enable-benchmarks --disable-documentation 88 | cabal build --dry-run 89 | 90 | - name: Build 91 | run: cabal build all 92 | 93 | - name: Run tests 94 | run: cabal test all 95 | 96 | - name: Check cabal file 97 | run: cabal check 98 | 99 | - name: Run parser 100 | run: cabal run 101 | 102 | - name: Checkout files 103 | run: | 104 | pwd 105 | ls -la 106 | ls -la docs 107 | 108 | hlint: 109 | name: HLint 110 | runs-on: ubuntu-latest 111 | 112 | defaults: 113 | run: 114 | working-directory: . 115 | 116 | steps: 117 | - uses: actions/checkout@v4 118 | 119 | - name: "Set up HLint" 120 | uses: haskell-actions/hlint-setup@v2 121 | 122 | - name: "Run HLint" 123 | uses: haskell-actions/hlint-run@v2 124 | with: 125 | path: parser/ 126 | fail-on: warning 127 | 128 | pylint: 129 | name: Pylint 130 | runs-on: ubuntu-latest 131 | 132 | steps: 133 | - uses: actions/checkout@v4 134 | 135 | - name: Set up Python Environment 136 | uses: actions/setup-python@v5 137 | with: 138 | python-version: "3.12" 139 | 140 | - name: Setup uv 141 | uses: astral-sh/setup-uv@v4 142 | 143 | - name: Install dependencies (uv dev) 144 | run: uv sync --dev --locked 145 | 146 | - name: Analyzing the code with pylint 147 | run: uv run pylint $(git ls-files '*.py') 148 | -------------------------------------------------------------------------------- /parser.cabal: -------------------------------------------------------------------------------- 1 | cabal-version: 3.0 2 | -- The cabal-version field refers to the version of the .cabal specification, 3 | -- and can be different from the cabal-install (the tool) version and the 4 | -- Cabal (the library) version you are using. As such, the Cabal (the library) 5 | -- version used must be equal or greater than the version stated in this field. 6 | -- Starting from the specification version 2.2, the cabal-version field must be 7 | -- the first thing in the cabal file. 8 | 9 | -- Initial package description 'parser' generated by 10 | -- 'cabal init'. For further documentation, see: 11 | -- http://haskell.org/cabal/users-guide/ 12 | -- 13 | -- The name of the package. 14 | name: parser 15 | category: Data 16 | synopsis: Chinese Holidays Calendar Parser and Generator 17 | description: Calendar of Public Holidays in China 18 | 中国大陆节假日日历订阅 19 | 20 | -- The package version. 21 | -- See the Haskell package versioning policy (PVP) for standards 22 | -- guiding when and how versions should be incremented. 23 | -- https://pvp.haskell.org 24 | -- PVP summary: +-+------- breaking API changes 25 | -- | | +----- non-breaking API additions 26 | -- | | | +--- code changes with no API change 27 | version: 0.2.1.0 28 | 29 | -- A short (one-line) description of the package. 30 | -- synopsis: 31 | 32 | -- A longer description of the package. 33 | -- description: 34 | 35 | -- The license under which the package is released. 36 | license: GPL-3.0-only 37 | 38 | -- The file containing the license text. 39 | license-file: LICENSE 40 | 41 | -- The package author(s). 42 | author: Muhan Li 43 | 44 | -- An email address to which users can send suggestions, bug reports, and patches. 45 | maintainer: limuhan@msn.com 46 | 47 | -- A copyright notice. 48 | -- copyright: 49 | build-type: Simple 50 | 51 | -- Extra doc files to be distributed with the package, such as a CHANGELOG or a README. 52 | -- extra-doc-files: CHANGELOG.md 53 | 54 | -- Extra source files to be distributed with the package, such as examples, or a tutorial module. 55 | -- extra-source-files: 56 | 57 | -- formatting command: fourmolu --mode inplace $(git ls-files '*.hs') --indentation 2 --indent-wheres true 58 | 59 | common warnings 60 | ghc-options: -Wall 61 | 62 | executable main 63 | -- Import common warning flags. 64 | import: warnings 65 | 66 | -- .hs or .lhs file containing the Main module. 67 | main-is: Main.hs 68 | 69 | -- Modules included in this executable, other than Main. 70 | other-modules: Main.Base Main.Input Main.Output 71 | 72 | -- LANGUAGE extensions used by modules in this package. 73 | -- other-extensions: 74 | 75 | -- Other library packages from which modules are imported. 76 | build-depends: base >= 4.16.4.0 && < 4.20, 77 | directory >= 1.3.6 && < 1.4, 78 | filepath >= 1.4.2 && < 1.5, 79 | split >= 0.2.4 && < 0.3, 80 | time >= 1.11.1 && < 1.12, 81 | uuid >= 1.3.15 && < 1.4 82 | 83 | -- Directories containing source files. 84 | hs-source-dirs: parser 85 | 86 | -- Base language which the package is written in. 87 | default-language: Haskell2010 88 | 89 | test-suite test 90 | type: exitcode-stdio-1.0 91 | main-is: Test.hs 92 | other-modules: Main.Base Main.Input Main.Output 93 | build-depends: base >= 4.16.4.0 && < 4.20, 94 | directory >= 1.3.6 && < 1.4, 95 | filepath >= 1.4.2 && < 1.5, 96 | split >= 0.2.4 && < 0.3, 97 | time >= 1.11.1 && < 1.12, 98 | uuid >= 1.3.15 && < 1.4, 99 | HUnit >= 1.6 && < 1.7 100 | hs-source-dirs: parser 101 | default-language: Haskell2010 102 | 103 | source-repository head 104 | type: git 105 | location: https://github.com/theRank/chinese-holidays-calendar 106 | -------------------------------------------------------------------------------- /crawler.py: -------------------------------------------------------------------------------- 1 | """从国务院官网抓取放假信息""" 2 | 3 | import os 4 | import re 5 | import json 6 | from datetime import datetime, timezone, timedelta 7 | from typing import Iterator, Tuple 8 | 9 | import requests 10 | 11 | 12 | def main(): 13 | """更新节假日信息""" 14 | comments: list[str] = [ 15 | "// automatically generated on", 16 | "// and manually checked on DATA NOT VERIFIED", 17 | ] 18 | 19 | for year, link, holidays in data(): 20 | print(year, link, holidays, sep='\n') 21 | file = f"./data/{year}.txt" 22 | 23 | if os.path.isfile(file): 24 | with open(file, encoding='utf-8') as f_obj: 25 | existing = f_obj.read() 26 | if "DATA NOT VERIFIED" not in existing: 27 | continue # 数据已人工确认 28 | 29 | with open(file, 'w', encoding='utf-8') as f_obj: 30 | f_obj.write( 31 | f"{comments[0]} {beijing_time().strftime('%-m/%-d/%Y')}\n" 32 | f"{comments[1]}\n// source: {link}\n\n{holidays}" 33 | ) 34 | 35 | with open('./README.md', 'r', encoding='utf-8') as f_obj: 36 | content = f_obj.read().split('\n') 37 | 38 | update_info = "> Calendar data updated " 39 | for i, line in enumerate(content): 40 | if line.startswith(update_info): 41 | content[i] = update_info + beijing_time().strftime("at %-H:%M on %B %-d, %Y") 42 | 43 | with open('./README.md', 'w', encoding='utf-8') as f_obj: 44 | f_obj.write('\n'.join(content)) 45 | 46 | 47 | def data() -> Iterator[Tuple[str, str, str]]: 48 | """爬取国务院网站数据""" 49 | for year, link in source(): 50 | print(f"\n\n{year}: {link}") 51 | results: list[str] = [] 52 | 53 | response = requests.get(link, timeout=(5, 10)) 54 | response.encoding = response.apparent_encoding 55 | 56 | line_regex = r"(?P.)、(?P.*):()?(?P.*放假.*。)" 57 | for line in response.text.replace('
', '\n').replace('

', '\n').split('\n'): 58 | if match := re.search(line_regex, line): 59 | work, rest, *_ = match.group("detail").split('。') 60 | dates = ';'.join((match.group("name"), parse(work, year), parse(rest, year))) 61 | print(dates) # 已知需要人工干预如下情况: 1.与周末连休, 2.补休 62 | results.append(f"{dates:50} // {match.group('detail')}") 63 | 64 | yield year, link, '\n'.join(results) 65 | 66 | 67 | def parse(text: str, year: str) -> str: 68 | """解析节假日安排数据""" 69 | results: list[str] = [] 70 | range_type_a = r"(?P\d?\d)月(?P\d?\d)日(([^)]+))?至(?P\d?\d)月(?P\d?\d)日" 71 | range_type_b = r"(?P\d?\d)月(?P\d?\d)日(([^)]+))?至(?P\d?\d)日" 72 | single_date = r"(?P\d?\d)月(?P\d?\d)日" 73 | 74 | for item in text.split('、'): 75 | if match := re.search(range_type_a, item): 76 | results.append(f"{year}.{match.group('m1')}.{match.group('d1')}-" 77 | f"{year}.{match.group('m2')}.{match.group('d2')}") 78 | print(f"\tA: {results[-1]:25} {item}") 79 | 80 | elif match := re.search(range_type_b, item): 81 | results.append(f"{year}.{match.group('m1')}.{match.group('d1')}-" 82 | f"{year}.{match.group('m1')}.{match.group('d2')}") 83 | print(f"\tB: {results[-1]:25} {item}") 84 | 85 | elif match := re.search(single_date, item): 86 | results.append(f"{year}.{match.group('m1')}.{match.group('d1')}") 87 | print(f"\tS: {results[-1]:25} {item}") 88 | 89 | else: 90 | print(f"\tX: {'':15} {item}") 91 | 92 | return ','.join(results) 93 | 94 | 95 | def source() -> Iterator[Tuple[str, str]]: 96 | """获取官网发布通知列表""" 97 | search_url = ("https://sousuoht.www.gov.cn/athena/forward/" 98 | "2B22E8E39E850E17F95A016A74FCB6B673336FA8B6FEC0E2955907EF9AEE06BE") 99 | search_resp = requests.post( 100 | search_url, 101 | timeout=(5, 10), 102 | json={ 103 | "code": "17da70961a7", 104 | "dataTypeId": "107", 105 | "orderBy": "time", 106 | "searchBy": "title", 107 | "pageNo": 1, 108 | "pageSize": 10, 109 | "searchWord": "节假日安排" 110 | }, 111 | headers={ 112 | "Content-Type": "application/json;charset=UTF-8", 113 | "Athenaappname": "%E5%9B%BD%E7%BD%91%E6%90%9C%E7%B4%A2", # 国网搜索 114 | "Athenaappkey": "R6kU1sKz%2BSHMWevvn8zRHAGJOwe6o53KEf7v0BJPVWY0Vxb4gIMCWDshQDW" 115 | "xw2Ua5CtSpEalXVlVzlj4mulMw6lnQzuqTEDDRC833wtXJyC%2F1kPbME1oCi" 116 | "jkQOluRhbXZj3iRK1nXCzq5Sw%2F%2B2XbJbm%2BFEPLZRwoNNeYoOLcueg%3D" 117 | }, 118 | ) 119 | 120 | search_resp.encoding = search_resp.apparent_encoding 121 | search_data = json.loads(search_resp.text) 122 | # print(search_data) 123 | 124 | for result in search_data["result"]["data"]["middle"]["list"]: 125 | if match := re.search(r"^国务院办公厅关于(?P20\d\d)年.*通知", result["title"]): 126 | print(match.group("year"), result["url"]) 127 | print(result, end="\n\n") 128 | yield match.group("year"), result["url"] 129 | 130 | 131 | def beijing_time() -> datetime: 132 | """获取当前北京时间""" 133 | utc_time = datetime.utcnow().replace(tzinfo=timezone.utc) 134 | return utc_time.astimezone(timezone(timedelta(hours=8))) 135 | 136 | 137 | if __name__ == '__main__': 138 | main() 139 | -------------------------------------------------------------------------------- /parser/Test.hs: -------------------------------------------------------------------------------- 1 | module Main where 2 | 3 | import Data.Function (on) 4 | import Main.Base 5 | import Main.Input 6 | import System.Exit (exitFailure, exitSuccess) 7 | import Test.HUnit 8 | 9 | instance Eq HolidayRaw where 10 | (==) = (==) `on` raw 11 | 12 | raw a = (rawName a, rawRest a, rawWork a) 13 | 14 | instance Show HolidayRaw where 15 | show raw = unwords [rawName raw, rawRest raw, rawWork raw] 16 | 17 | testA1 = 18 | TestCase 19 | ( assertEqual 20 | "A1 - data - basic" 21 | [HolidayRaw "a" "b" "c"] 22 | $ parseRaw "a;b;c" 23 | ) 24 | 25 | testA2 = 26 | TestCase 27 | ( assertEqual 28 | "A2 - data - robust" 29 | [HolidayRaw "a12" "b345" "c678"] 30 | $ parseRaw " a12;b345;c678 " 31 | ) 32 | 33 | testA3 = 34 | TestCase 35 | ( assertEqual 36 | "A3 - comments - basic" 37 | [] 38 | $ parseRaw "//comment" 39 | ) 40 | 41 | testA4 = 42 | TestCase 43 | ( assertEqual 44 | "A4 - comments - robust" 45 | [] 46 | $ parseRaw " // a;b;c 123 " 47 | ) 48 | 49 | testA5 = 50 | TestCase 51 | ( assertEqual 52 | "A5 - hybrid - basic" 53 | [HolidayRaw "a" "b" "c"] 54 | $ parseRaw "a;b;c // d;e;f 456 " 55 | ) 56 | 57 | testA6 = 58 | TestCase 59 | ( assertEqual 60 | "A6 - hybrid - robust" 61 | [HolidayRaw "a" "b" "c"] 62 | $ parseRaw " a;b;c 123 // d;e;f 456 " 63 | ) 64 | 65 | testA7 = 66 | TestCase 67 | ( assertEqual 68 | "A7 - empty - basic" 69 | [] 70 | $ parseRaw "" 71 | ) 72 | 73 | testA8 = 74 | TestCase 75 | ( assertEqual 76 | "A8 - empty - robust" 77 | [] 78 | $ parseRaw " // " 79 | ) 80 | 81 | testA9 = 82 | TestCase 83 | ( assertEqual 84 | "A9 - multi-line" 85 | [HolidayRaw "a" "b" "c", HolidayRaw "d" "e" "f"] 86 | $ parseRaw . unlines 87 | $ [ "// INTRO" 88 | , "" 89 | , "a;b;c // dp1" 90 | , "// comment" 91 | , "d;e;f // dp2" 92 | , "END // TEST" 93 | ] 94 | ) 95 | 96 | testB1 = 97 | TestCase 98 | ( assertEqual 99 | "B1 - case 1. like 2020.1.1 - basic" 100 | ["2020.1.1"] 101 | $ map printTime 102 | $ parseDate ["2020.1.1"] 103 | ) 104 | 105 | testB2 = 106 | TestCase 107 | ( assertEqual 108 | "B2 - case 1. like 2020.1.1 - robust" 109 | ["2021.11.2"] 110 | (map printTime $ parseDate ["2021.11.02"]) 111 | ) 112 | 113 | testB3 = 114 | TestCase 115 | ( assertEqual 116 | "B3 - case 2. like 2020.1.1-2020.1.3 - basic" 117 | ["2022.1.1", "2022.1.2", "2022.1.3"] 118 | (map printTime $ parseDate ["2022.1.1", "2022.1.3"]) 119 | ) 120 | 121 | testB4 = 122 | TestCase 123 | ( assertEqual 124 | "B4 - case 2. like 2020.1.1-2020.1.3 - cross month" 125 | ["2023.2.27", "2023.2.28", "2023.3.1", "2023.3.2"] 126 | (map printTime $ parseDate ["2023.2.27", "2023.3.2"]) 127 | ) 128 | 129 | testB5 = 130 | TestCase 131 | ( assertEqual 132 | "B5 - case 2. like 2020.1.1-2020.1.3 - cross month 2" 133 | ["2024.2.28", "2024.2.29", "2024.3.1"] 134 | (map printTime $ parseDate ["2024.2.28", "2024.3.1"]) 135 | ) 136 | 137 | testB6 = 138 | TestCase 139 | ( assertEqual 140 | "B6 - case 2. like 2020.1.1-2020.1.3 - cross year" 141 | ["2025.12.30", "2025.12.31", "2026.1.1", "2026.1.2"] 142 | (map printTime $ parseDate ["2025.12.30", "2026.1.2"]) 143 | ) 144 | 145 | testC1 = 146 | TestCase 147 | ( assertEqual 148 | "C1 - case 1. like 2020.1.1 - a1 2" 149 | [(1, 2, "2020.1.1"), (2, 2, "2020.1.3")] 150 | $ map (\(Date a b c) -> (a, b, printTime c)) 151 | $ parseDates "2020.1.1,2020.1.3" 152 | ) 153 | 154 | testC2 = 155 | TestCase 156 | ( assertEqual 157 | "C2 - case 1. like 2020.1.1 - a1 3" 158 | [(1, 3, "2020.1.1"), (2, 3, "2020.1.3"), (3, 3, "2020.1.5")] 159 | $ map (\(Date a b c) -> (a, b, printTime c)) 160 | $ parseDates "2020.1.1,2020.1.3,2020.1.5" 161 | ) 162 | 163 | testC3 = 164 | TestCase 165 | ( assertEqual 166 | "C3 - case 2. like 2020.1.1-2020.1.3 - a3 2" 167 | [(1, 4, "2020.1.1"), (2, 4, "2020.1.2"), (3, 4, "2020.1.6"), (4, 4, "2020.1.7")] 168 | $ map (\(Date a b c) -> (a, b, printTime c)) 169 | $ parseDates "2020.1.1-2020.1.2,2020.1.6-2020.1.7" 170 | ) 171 | 172 | testC4 = 173 | TestCase 174 | ( assertEqual 175 | "C4 - case 2. like 2020.1.1-2020.1.3 - a1 a3" 176 | [(1, 4, "2020.1.1"), (2, 4, "2020.1.2"), (3, 4, "2020.1.3"), (4, 4, "2020.1.6")] 177 | $ map (\(Date a b c) -> (a, b, printTime c)) 178 | $ parseDates "2020.1.1-2020.1.3,2020.1.6" 179 | ) 180 | 181 | testC5 = 182 | TestCase 183 | ( assertEqual 184 | "C5 - case 2. like 2020.1.1-2020.1.3 - a3 a1" 185 | [(1, 5, "2019.12.6"), (2, 5, "2020.1.1"), (3, 5, "2020.1.2"), (4, 5, "2020.1.3"), (5, 5, "2021.11.11")] 186 | $ map (\(Date a b c) -> (a, b, printTime c)) 187 | $ parseDates "2019.12.6,2020.1.1-2020.1.3,2021.11.11" 188 | ) 189 | 190 | testC6 = 191 | TestCase 192 | ( assertEqual 193 | "C6 - case 2. like 2020.1.1-2020.1.3 - a3 a1" 194 | [(1, 3, "2019.12.6"), (2, 3, "2020.1.1"), (3, 3, "2021.11.11")] 195 | $ map (\(Date a b c) -> (a, b, printTime c)) 196 | $ parseDates "2019.12.6,2020.1.1-2020.1.1,,,2021.11.11" 197 | ) 198 | 199 | tests :: Test 200 | tests = 201 | TestList 202 | [ -- A. parseRaw 203 | TestLabel "Test parseRaw 1" testA1 204 | , TestLabel "Test parseRaw 2" testA2 205 | , TestLabel "Test parseRaw 3" testA3 206 | , TestLabel "Test parseRaw 4" testA4 207 | , TestLabel "Test parseRaw 5" testA5 208 | , TestLabel "Test parseRaw 6" testA6 209 | , TestLabel "Test parseRaw 7" testA7 210 | , TestLabel "Test parseRaw 8" testA8 211 | , TestLabel "Test parseRaw 9" testA9 212 | , -- B. parseDate 213 | TestLabel "Test parseDate 1" testB1 214 | , TestLabel "Test parseDate 2" testB2 215 | , TestLabel "Test parseDate 3" testB3 216 | , TestLabel "Test parseDate 4" testB4 217 | , TestLabel "Test parseDate 5" testB5 218 | , TestLabel "Test parseDate 6" testB6 219 | , -- C. parseDates 220 | TestLabel "Test parseDates 1" testC1 221 | , TestLabel "Test parseDates 2" testC2 222 | , TestLabel "Test parseDates 3" testC3 223 | , TestLabel "Test parseDates 4" testC4 224 | , TestLabel "Test parseDates 5" testC5 225 | , TestLabel "Test parseDates 6" testC6 226 | ] 227 | 228 | main :: IO () 229 | main = do 230 | counts <- runTestTT tests 231 | if errors counts + failures counts == 0 232 | then exitSuccess 233 | else exitFailure 234 | -------------------------------------------------------------------------------- /docs/work.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//Rank Technology//Chinese Holidays//EN 4 | X-WR-CALNAME:中国节假日安排(补班) 5 | 6 | BEGIN:VEVENT 7 | UID:20130105-0001-0002-0002-0000a95511fe 8 | DTSTART;VALUE=DATE:20130105 9 | SUMMARY:元旦补班 10 | DESCRIPTION:补班第1天 / 共2天 11 | END:VEVENT 12 | 13 | BEGIN:VEVENT 14 | UID:20130106-0002-0002-0002-0000a95511fe 15 | DTSTART;VALUE=DATE:20130106 16 | SUMMARY:元旦补班 17 | DESCRIPTION:补班第2天 / 共2天 18 | END:VEVENT 19 | 20 | BEGIN:VEVENT 21 | UID:20130216-0001-0002-0002-0000a95511fe 22 | DTSTART;VALUE=DATE:20130216 23 | SUMMARY:春节补班 24 | DESCRIPTION:补班第1天 / 共2天 25 | END:VEVENT 26 | 27 | BEGIN:VEVENT 28 | UID:20130217-0002-0002-0002-0000a95511fe 29 | DTSTART;VALUE=DATE:20130217 30 | SUMMARY:春节补班 31 | DESCRIPTION:补班第2天 / 共2天 32 | END:VEVENT 33 | 34 | BEGIN:VEVENT 35 | UID:20130407-0001-0001-0002-0000a95511fe 36 | DTSTART;VALUE=DATE:20130407 37 | SUMMARY:清明节补班 38 | DESCRIPTION:补班第1天 / 共1天 39 | END:VEVENT 40 | 41 | BEGIN:VEVENT 42 | UID:20130427-0001-0002-0002-0000a95511fe 43 | DTSTART;VALUE=DATE:20130427 44 | SUMMARY:劳动节补班 45 | DESCRIPTION:补班第1天 / 共2天 46 | END:VEVENT 47 | 48 | BEGIN:VEVENT 49 | UID:20130428-0002-0002-0002-0000a95511fe 50 | DTSTART;VALUE=DATE:20130428 51 | SUMMARY:劳动节补班 52 | DESCRIPTION:补班第2天 / 共2天 53 | END:VEVENT 54 | 55 | BEGIN:VEVENT 56 | UID:20130608-0001-0002-0002-0000a95511fe 57 | DTSTART;VALUE=DATE:20130608 58 | SUMMARY:端午节补班 59 | DESCRIPTION:补班第1天 / 共2天 60 | END:VEVENT 61 | 62 | BEGIN:VEVENT 63 | UID:20130609-0002-0002-0002-0000a95511fe 64 | DTSTART;VALUE=DATE:20130609 65 | SUMMARY:端午节补班 66 | DESCRIPTION:补班第2天 / 共2天 67 | END:VEVENT 68 | 69 | BEGIN:VEVENT 70 | UID:20130922-0001-0001-0002-0000a95511fe 71 | DTSTART;VALUE=DATE:20130922 72 | SUMMARY:中秋节补班 73 | DESCRIPTION:补班第1天 / 共1天 74 | END:VEVENT 75 | 76 | BEGIN:VEVENT 77 | UID:20130929-0001-0002-0002-0000a95511fe 78 | DTSTART;VALUE=DATE:20130929 79 | SUMMARY:国庆节补班 80 | DESCRIPTION:补班第1天 / 共2天 81 | END:VEVENT 82 | 83 | BEGIN:VEVENT 84 | UID:20131012-0002-0002-0002-0000a95511fe 85 | DTSTART;VALUE=DATE:20131012 86 | SUMMARY:国庆节补班 87 | DESCRIPTION:补班第2天 / 共2天 88 | END:VEVENT 89 | 90 | BEGIN:VEVENT 91 | UID:20140126-0001-0002-0002-0000a95511fe 92 | DTSTART;VALUE=DATE:20140126 93 | SUMMARY:春节补班 94 | DESCRIPTION:补班第1天 / 共2天 95 | END:VEVENT 96 | 97 | BEGIN:VEVENT 98 | UID:20140208-0002-0002-0002-0000a95511fe 99 | DTSTART;VALUE=DATE:20140208 100 | SUMMARY:春节补班 101 | DESCRIPTION:补班第2天 / 共2天 102 | END:VEVENT 103 | 104 | BEGIN:VEVENT 105 | UID:20140504-0001-0001-0002-0000a95511fe 106 | DTSTART;VALUE=DATE:20140504 107 | SUMMARY:劳动节补班 108 | DESCRIPTION:补班第1天 / 共1天 109 | END:VEVENT 110 | 111 | BEGIN:VEVENT 112 | UID:20140928-0001-0002-0002-0000a95511fe 113 | DTSTART;VALUE=DATE:20140928 114 | SUMMARY:国庆节补班 115 | DESCRIPTION:补班第1天 / 共2天 116 | END:VEVENT 117 | 118 | BEGIN:VEVENT 119 | UID:20141011-0002-0002-0002-0000a95511fe 120 | DTSTART;VALUE=DATE:20141011 121 | SUMMARY:国庆节补班 122 | DESCRIPTION:补班第2天 / 共2天 123 | END:VEVENT 124 | 125 | BEGIN:VEVENT 126 | UID:20150104-0001-0001-0002-0000a95511fe 127 | DTSTART;VALUE=DATE:20150104 128 | SUMMARY:元旦补班 129 | DESCRIPTION:补班第1天 / 共1天 130 | END:VEVENT 131 | 132 | BEGIN:VEVENT 133 | UID:20150215-0001-0002-0002-0000a95511fe 134 | DTSTART;VALUE=DATE:20150215 135 | SUMMARY:春节补班 136 | DESCRIPTION:补班第1天 / 共2天 137 | END:VEVENT 138 | 139 | BEGIN:VEVENT 140 | UID:20150228-0002-0002-0002-0000a95511fe 141 | DTSTART;VALUE=DATE:20150228 142 | SUMMARY:春节补班 143 | DESCRIPTION:补班第2天 / 共2天 144 | END:VEVENT 145 | 146 | BEGIN:VEVENT 147 | UID:20151010-0001-0001-0002-0000a95511fe 148 | DTSTART;VALUE=DATE:20151010 149 | SUMMARY:国庆节补班 150 | DESCRIPTION:补班第1天 / 共1天 151 | END:VEVENT 152 | 153 | BEGIN:VEVENT 154 | UID:20160206-0001-0002-0002-0000a95511fe 155 | DTSTART;VALUE=DATE:20160206 156 | SUMMARY:春节补班 157 | DESCRIPTION:补班第1天 / 共2天 158 | END:VEVENT 159 | 160 | BEGIN:VEVENT 161 | UID:20160214-0002-0002-0002-0000a95511fe 162 | DTSTART;VALUE=DATE:20160214 163 | SUMMARY:春节补班 164 | DESCRIPTION:补班第2天 / 共2天 165 | END:VEVENT 166 | 167 | BEGIN:VEVENT 168 | UID:20160612-0001-0001-0002-0000a95511fe 169 | DTSTART;VALUE=DATE:20160612 170 | SUMMARY:端午节补班 171 | DESCRIPTION:补班第1天 / 共1天 172 | END:VEVENT 173 | 174 | BEGIN:VEVENT 175 | UID:20160918-0001-0001-0002-0000a95511fe 176 | DTSTART;VALUE=DATE:20160918 177 | SUMMARY:中秋节补班 178 | DESCRIPTION:补班第1天 / 共1天 179 | END:VEVENT 180 | 181 | BEGIN:VEVENT 182 | UID:20161008-0001-0002-0002-0000a95511fe 183 | DTSTART;VALUE=DATE:20161008 184 | SUMMARY:国庆节补班 185 | DESCRIPTION:补班第1天 / 共2天 186 | END:VEVENT 187 | 188 | BEGIN:VEVENT 189 | UID:20161009-0002-0002-0002-0000a95511fe 190 | DTSTART;VALUE=DATE:20161009 191 | SUMMARY:国庆节补班 192 | DESCRIPTION:补班第2天 / 共2天 193 | END:VEVENT 194 | 195 | BEGIN:VEVENT 196 | UID:20170122-0001-0002-0002-0000a95511fe 197 | DTSTART;VALUE=DATE:20170122 198 | SUMMARY:春节补班 199 | DESCRIPTION:补班第1天 / 共2天 200 | END:VEVENT 201 | 202 | BEGIN:VEVENT 203 | UID:20170204-0002-0002-0002-0000a95511fe 204 | DTSTART;VALUE=DATE:20170204 205 | SUMMARY:春节补班 206 | DESCRIPTION:补班第2天 / 共2天 207 | END:VEVENT 208 | 209 | BEGIN:VEVENT 210 | UID:20170401-0001-0001-0002-0000a95511fe 211 | DTSTART;VALUE=DATE:20170401 212 | SUMMARY:清明节补班 213 | DESCRIPTION:补班第1天 / 共1天 214 | END:VEVENT 215 | 216 | BEGIN:VEVENT 217 | UID:20170527-0001-0001-0002-0000a95511fe 218 | DTSTART;VALUE=DATE:20170527 219 | SUMMARY:端午节补班 220 | DESCRIPTION:补班第1天 / 共1天 221 | END:VEVENT 222 | 223 | BEGIN:VEVENT 224 | UID:20170930-0001-0001-0002-0000a95511fe 225 | DTSTART;VALUE=DATE:20170930 226 | SUMMARY:中秋节、国庆节补班 227 | DESCRIPTION:补班第1天 / 共1天 228 | END:VEVENT 229 | 230 | BEGIN:VEVENT 231 | UID:20180211-0001-0002-0002-0000a95511fe 232 | DTSTART;VALUE=DATE:20180211 233 | SUMMARY:春节补班 234 | DESCRIPTION:补班第1天 / 共2天 235 | END:VEVENT 236 | 237 | BEGIN:VEVENT 238 | UID:20180224-0002-0002-0002-0000a95511fe 239 | DTSTART;VALUE=DATE:20180224 240 | SUMMARY:春节补班 241 | DESCRIPTION:补班第2天 / 共2天 242 | END:VEVENT 243 | 244 | BEGIN:VEVENT 245 | UID:20180408-0001-0001-0002-0000a95511fe 246 | DTSTART;VALUE=DATE:20180408 247 | SUMMARY:清明节补班 248 | DESCRIPTION:补班第1天 / 共1天 249 | END:VEVENT 250 | 251 | BEGIN:VEVENT 252 | UID:20180428-0001-0001-0002-0000a95511fe 253 | DTSTART;VALUE=DATE:20180428 254 | SUMMARY:劳动节补班 255 | DESCRIPTION:补班第1天 / 共1天 256 | END:VEVENT 257 | 258 | BEGIN:VEVENT 259 | UID:20180929-0001-0002-0002-0000a95511fe 260 | DTSTART;VALUE=DATE:20180929 261 | SUMMARY:国庆节补班 262 | DESCRIPTION:补班第1天 / 共2天 263 | END:VEVENT 264 | 265 | BEGIN:VEVENT 266 | UID:20180930-0002-0002-0002-0000a95511fe 267 | DTSTART;VALUE=DATE:20180930 268 | SUMMARY:国庆节补班 269 | DESCRIPTION:补班第2天 / 共2天 270 | END:VEVENT 271 | 272 | BEGIN:VEVENT 273 | UID:20181219-0001-0001-0002-0000a95511fe 274 | DTSTART;VALUE=DATE:20181219 275 | SUMMARY:元旦补班 276 | DESCRIPTION:补班第1天 / 共1天 277 | END:VEVENT 278 | 279 | BEGIN:VEVENT 280 | UID:20190202-0001-0002-0002-0000a95511fe 281 | DTSTART;VALUE=DATE:20190202 282 | SUMMARY:春节补班 283 | DESCRIPTION:补班第1天 / 共2天 284 | END:VEVENT 285 | 286 | BEGIN:VEVENT 287 | UID:20190203-0002-0002-0002-0000a95511fe 288 | DTSTART;VALUE=DATE:20190203 289 | SUMMARY:春节补班 290 | DESCRIPTION:补班第2天 / 共2天 291 | END:VEVENT 292 | 293 | BEGIN:VEVENT 294 | UID:20190929-0001-0002-0002-0000a95511fe 295 | DTSTART;VALUE=DATE:20190929 296 | SUMMARY:国庆节补班 297 | DESCRIPTION:补班第1天 / 共2天 298 | END:VEVENT 299 | 300 | BEGIN:VEVENT 301 | UID:20191012-0002-0002-0002-0000a95511fe 302 | DTSTART;VALUE=DATE:20191012 303 | SUMMARY:国庆节补班 304 | DESCRIPTION:补班第2天 / 共2天 305 | END:VEVENT 306 | 307 | BEGIN:VEVENT 308 | UID:20200119-0001-0002-0002-0000a95511fe 309 | DTSTART;VALUE=DATE:20200119 310 | SUMMARY:春节补班 311 | DESCRIPTION:补班第1天 / 共2天 312 | END:VEVENT 313 | 314 | BEGIN:VEVENT 315 | UID:20200201-0002-0002-0002-0000a95511fe 316 | DTSTART;VALUE=DATE:20200201 317 | SUMMARY:春节补班 318 | DESCRIPTION:补班第2天 / 共2天 319 | END:VEVENT 320 | 321 | BEGIN:VEVENT 322 | UID:20200426-0001-0002-0002-0000a95511fe 323 | DTSTART;VALUE=DATE:20200426 324 | SUMMARY:劳动节补班 325 | DESCRIPTION:补班第1天 / 共2天 326 | END:VEVENT 327 | 328 | BEGIN:VEVENT 329 | UID:20200509-0002-0002-0002-0000a95511fe 330 | DTSTART;VALUE=DATE:20200509 331 | SUMMARY:劳动节补班 332 | DESCRIPTION:补班第2天 / 共2天 333 | END:VEVENT 334 | 335 | BEGIN:VEVENT 336 | UID:20200628-0001-0001-0002-0000a95511fe 337 | DTSTART;VALUE=DATE:20200628 338 | SUMMARY:端午节补班 339 | DESCRIPTION:补班第1天 / 共1天 340 | END:VEVENT 341 | 342 | BEGIN:VEVENT 343 | UID:20200927-0001-0002-0002-0000a95511fe 344 | DTSTART;VALUE=DATE:20200927 345 | SUMMARY:国庆节、中秋节补班 346 | DESCRIPTION:补班第1天 / 共2天 347 | END:VEVENT 348 | 349 | BEGIN:VEVENT 350 | UID:20201010-0002-0002-0002-0000a95511fe 351 | DTSTART;VALUE=DATE:20201010 352 | SUMMARY:国庆节、中秋节补班 353 | DESCRIPTION:补班第2天 / 共2天 354 | END:VEVENT 355 | 356 | BEGIN:VEVENT 357 | UID:20210207-0001-0002-0002-0000a95511fe 358 | DTSTART;VALUE=DATE:20210207 359 | SUMMARY:春节补班 360 | DESCRIPTION:补班第1天 / 共2天 361 | END:VEVENT 362 | 363 | BEGIN:VEVENT 364 | UID:20210220-0002-0002-0002-0000a95511fe 365 | DTSTART;VALUE=DATE:20210220 366 | SUMMARY:春节补班 367 | DESCRIPTION:补班第2天 / 共2天 368 | END:VEVENT 369 | 370 | BEGIN:VEVENT 371 | UID:20210425-0001-0002-0002-0000a95511fe 372 | DTSTART;VALUE=DATE:20210425 373 | SUMMARY:劳动节补班 374 | DESCRIPTION:补班第1天 / 共2天 375 | END:VEVENT 376 | 377 | BEGIN:VEVENT 378 | UID:20210508-0002-0002-0002-0000a95511fe 379 | DTSTART;VALUE=DATE:20210508 380 | SUMMARY:劳动节补班 381 | DESCRIPTION:补班第2天 / 共2天 382 | END:VEVENT 383 | 384 | BEGIN:VEVENT 385 | UID:20210918-0001-0001-0002-0000a95511fe 386 | DTSTART;VALUE=DATE:20210918 387 | SUMMARY:中秋节补班 388 | DESCRIPTION:补班第1天 / 共1天 389 | END:VEVENT 390 | 391 | BEGIN:VEVENT 392 | UID:20210926-0001-0002-0002-0000a95511fe 393 | DTSTART;VALUE=DATE:20210926 394 | SUMMARY:国庆节补班 395 | DESCRIPTION:补班第1天 / 共2天 396 | END:VEVENT 397 | 398 | BEGIN:VEVENT 399 | UID:20211009-0002-0002-0002-0000a95511fe 400 | DTSTART;VALUE=DATE:20211009 401 | SUMMARY:国庆节补班 402 | DESCRIPTION:补班第2天 / 共2天 403 | END:VEVENT 404 | 405 | BEGIN:VEVENT 406 | UID:20220129-0001-0002-0002-0000a95511fe 407 | DTSTART;VALUE=DATE:20220129 408 | SUMMARY:春节补班 409 | DESCRIPTION:补班第1天 / 共2天 410 | END:VEVENT 411 | 412 | BEGIN:VEVENT 413 | UID:20220130-0002-0002-0002-0000a95511fe 414 | DTSTART;VALUE=DATE:20220130 415 | SUMMARY:春节补班 416 | DESCRIPTION:补班第2天 / 共2天 417 | END:VEVENT 418 | 419 | BEGIN:VEVENT 420 | UID:20220402-0001-0001-0002-0000a95511fe 421 | DTSTART;VALUE=DATE:20220402 422 | SUMMARY:清明节补班 423 | DESCRIPTION:补班第1天 / 共1天 424 | END:VEVENT 425 | 426 | BEGIN:VEVENT 427 | UID:20220424-0001-0002-0002-0000a95511fe 428 | DTSTART;VALUE=DATE:20220424 429 | SUMMARY:劳动节补班 430 | DESCRIPTION:补班第1天 / 共2天 431 | END:VEVENT 432 | 433 | BEGIN:VEVENT 434 | UID:20220507-0002-0002-0002-0000a95511fe 435 | DTSTART;VALUE=DATE:20220507 436 | SUMMARY:劳动节补班 437 | DESCRIPTION:补班第2天 / 共2天 438 | END:VEVENT 439 | 440 | BEGIN:VEVENT 441 | UID:20221008-0001-0002-0002-0000a95511fe 442 | DTSTART;VALUE=DATE:20221008 443 | SUMMARY:国庆节补班 444 | DESCRIPTION:补班第1天 / 共2天 445 | END:VEVENT 446 | 447 | BEGIN:VEVENT 448 | UID:20221009-0002-0002-0002-0000a95511fe 449 | DTSTART;VALUE=DATE:20221009 450 | SUMMARY:国庆节补班 451 | DESCRIPTION:补班第2天 / 共2天 452 | END:VEVENT 453 | 454 | BEGIN:VEVENT 455 | UID:20230128-0001-0002-0002-0000a95511fe 456 | DTSTART;VALUE=DATE:20230128 457 | SUMMARY:春节补班 458 | DESCRIPTION:补班第1天 / 共2天 459 | END:VEVENT 460 | 461 | BEGIN:VEVENT 462 | UID:20230129-0002-0002-0002-0000a95511fe 463 | DTSTART;VALUE=DATE:20230129 464 | SUMMARY:春节补班 465 | DESCRIPTION:补班第2天 / 共2天 466 | END:VEVENT 467 | 468 | BEGIN:VEVENT 469 | UID:20230423-0001-0002-0002-0000a95511fe 470 | DTSTART;VALUE=DATE:20230423 471 | SUMMARY:劳动节补班 472 | DESCRIPTION:补班第1天 / 共2天 473 | END:VEVENT 474 | 475 | BEGIN:VEVENT 476 | UID:20230506-0002-0002-0002-0000a95511fe 477 | DTSTART;VALUE=DATE:20230506 478 | SUMMARY:劳动节补班 479 | DESCRIPTION:补班第2天 / 共2天 480 | END:VEVENT 481 | 482 | BEGIN:VEVENT 483 | UID:20230625-0001-0001-0002-0000a95511fe 484 | DTSTART;VALUE=DATE:20230625 485 | SUMMARY:端午节补班 486 | DESCRIPTION:补班第1天 / 共1天 487 | END:VEVENT 488 | 489 | BEGIN:VEVENT 490 | UID:20231007-0001-0002-0002-0000a95511fe 491 | DTSTART;VALUE=DATE:20231007 492 | SUMMARY:中秋节、国庆节补班 493 | DESCRIPTION:补班第1天 / 共2天 494 | END:VEVENT 495 | 496 | BEGIN:VEVENT 497 | UID:20231008-0002-0002-0002-0000a95511fe 498 | DTSTART;VALUE=DATE:20231008 499 | SUMMARY:中秋节、国庆节补班 500 | DESCRIPTION:补班第2天 / 共2天 501 | END:VEVENT 502 | 503 | BEGIN:VEVENT 504 | UID:20240204-0001-0002-0002-0000a95511fe 505 | DTSTART;VALUE=DATE:20240204 506 | SUMMARY:春节补班 507 | DESCRIPTION:补班第1天 / 共2天 508 | END:VEVENT 509 | 510 | BEGIN:VEVENT 511 | UID:20240218-0002-0002-0002-0000a95511fe 512 | DTSTART;VALUE=DATE:20240218 513 | SUMMARY:春节补班 514 | DESCRIPTION:补班第2天 / 共2天 515 | END:VEVENT 516 | 517 | BEGIN:VEVENT 518 | UID:20240407-0001-0001-0002-0000a95511fe 519 | DTSTART;VALUE=DATE:20240407 520 | SUMMARY:清明节补班 521 | DESCRIPTION:补班第1天 / 共1天 522 | END:VEVENT 523 | 524 | BEGIN:VEVENT 525 | UID:20240428-0001-0002-0002-0000a95511fe 526 | DTSTART;VALUE=DATE:20240428 527 | SUMMARY:劳动节补班 528 | DESCRIPTION:补班第1天 / 共2天 529 | END:VEVENT 530 | 531 | BEGIN:VEVENT 532 | UID:20240511-0002-0002-0002-0000a95511fe 533 | DTSTART;VALUE=DATE:20240511 534 | SUMMARY:劳动节补班 535 | DESCRIPTION:补班第2天 / 共2天 536 | END:VEVENT 537 | 538 | BEGIN:VEVENT 539 | UID:20240914-0001-0001-0002-0000a95511fe 540 | DTSTART;VALUE=DATE:20240914 541 | SUMMARY:中秋节补班 542 | DESCRIPTION:补班第1天 / 共1天 543 | END:VEVENT 544 | 545 | BEGIN:VEVENT 546 | UID:20240929-0001-0002-0002-0000a95511fe 547 | DTSTART;VALUE=DATE:20240929 548 | SUMMARY:国庆节补班 549 | DESCRIPTION:补班第1天 / 共2天 550 | END:VEVENT 551 | 552 | BEGIN:VEVENT 553 | UID:20241012-0002-0002-0002-0000a95511fe 554 | DTSTART;VALUE=DATE:20241012 555 | SUMMARY:国庆节补班 556 | DESCRIPTION:补班第2天 / 共2天 557 | END:VEVENT 558 | 559 | BEGIN:VEVENT 560 | UID:20250126-0001-0002-0002-0000a95511fe 561 | DTSTART;VALUE=DATE:20250126 562 | SUMMARY:春节补班 563 | DESCRIPTION:补班第1天 / 共2天 564 | END:VEVENT 565 | 566 | BEGIN:VEVENT 567 | UID:20250208-0002-0002-0002-0000a95511fe 568 | DTSTART;VALUE=DATE:20250208 569 | SUMMARY:春节补班 570 | DESCRIPTION:补班第2天 / 共2天 571 | END:VEVENT 572 | 573 | BEGIN:VEVENT 574 | UID:20250427-0001-0001-0002-0000a95511fe 575 | DTSTART;VALUE=DATE:20250427 576 | SUMMARY:劳动节补班 577 | DESCRIPTION:补班第1天 / 共1天 578 | END:VEVENT 579 | 580 | BEGIN:VEVENT 581 | UID:20250928-0001-0002-0002-0000a95511fe 582 | DTSTART;VALUE=DATE:20250928 583 | SUMMARY:国庆节、中秋节补班 584 | DESCRIPTION:补班第1天 / 共2天 585 | END:VEVENT 586 | 587 | BEGIN:VEVENT 588 | UID:20251011-0002-0002-0002-0000a95511fe 589 | DTSTART;VALUE=DATE:20251011 590 | SUMMARY:国庆节、中秋节补班 591 | DESCRIPTION:补班第2天 / 共2天 592 | END:VEVENT 593 | 594 | BEGIN:VEVENT 595 | UID:20260104-0001-0001-0002-0000a95511fe 596 | DTSTART;VALUE=DATE:20260104 597 | SUMMARY:元旦补班 598 | DESCRIPTION:补班第1天 / 共1天 599 | END:VEVENT 600 | 601 | BEGIN:VEVENT 602 | UID:20260214-0001-0002-0002-0000a95511fe 603 | DTSTART;VALUE=DATE:20260214 604 | SUMMARY:春节补班 605 | DESCRIPTION:补班第1天 / 共2天 606 | END:VEVENT 607 | 608 | BEGIN:VEVENT 609 | UID:20260228-0002-0002-0002-0000a95511fe 610 | DTSTART;VALUE=DATE:20260228 611 | SUMMARY:春节补班 612 | DESCRIPTION:补班第2天 / 共2天 613 | END:VEVENT 614 | 615 | BEGIN:VEVENT 616 | UID:20260509-0001-0001-0002-0000a95511fe 617 | DTSTART;VALUE=DATE:20260509 618 | SUMMARY:劳动节补班 619 | DESCRIPTION:补班第1天 / 共1天 620 | END:VEVENT 621 | 622 | BEGIN:VEVENT 623 | UID:20260920-0001-0002-0002-0000a95511fe 624 | DTSTART;VALUE=DATE:20260920 625 | SUMMARY:国庆节补班 626 | DESCRIPTION:补班第1天 / 共2天 627 | END:VEVENT 628 | 629 | BEGIN:VEVENT 630 | UID:20261010-0002-0002-0002-0000a95511fe 631 | DTSTART;VALUE=DATE:20261010 632 | SUMMARY:国庆节补班 633 | DESCRIPTION:补班第2天 / 共2天 634 | END:VEVENT 635 | 636 | 637 | END:VCALENDAR 638 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /docs/rest.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:-//Rank Technology//Chinese Holidays//EN 4 | X-WR-CALNAME:中国节假日安排(假期) 5 | 6 | BEGIN:VEVENT 7 | UID:20130101-0001-0003-0001-0000a95511fe 8 | DTSTART;VALUE=DATE:20130101 9 | SUMMARY:元旦假期 10 | DESCRIPTION:假期第1天 / 共3天 11 | END:VEVENT 12 | 13 | BEGIN:VEVENT 14 | UID:20130102-0002-0003-0001-0000a95511fe 15 | DTSTART;VALUE=DATE:20130102 16 | SUMMARY:元旦假期 17 | DESCRIPTION:假期第2天 / 共3天 18 | END:VEVENT 19 | 20 | BEGIN:VEVENT 21 | UID:20130103-0003-0003-0001-0000a95511fe 22 | DTSTART;VALUE=DATE:20130103 23 | SUMMARY:元旦假期 24 | DESCRIPTION:假期第3天 / 共3天 25 | END:VEVENT 26 | 27 | BEGIN:VEVENT 28 | UID:20130209-0001-0007-0001-0000a95511fe 29 | DTSTART;VALUE=DATE:20130209 30 | SUMMARY:春节假期 31 | DESCRIPTION:假期第1天 / 共7天 32 | END:VEVENT 33 | 34 | BEGIN:VEVENT 35 | UID:20130210-0002-0007-0001-0000a95511fe 36 | DTSTART;VALUE=DATE:20130210 37 | SUMMARY:春节假期 38 | DESCRIPTION:假期第2天 / 共7天 39 | END:VEVENT 40 | 41 | BEGIN:VEVENT 42 | UID:20130211-0003-0007-0001-0000a95511fe 43 | DTSTART;VALUE=DATE:20130211 44 | SUMMARY:春节假期 45 | DESCRIPTION:假期第3天 / 共7天 46 | END:VEVENT 47 | 48 | BEGIN:VEVENT 49 | UID:20130212-0004-0007-0001-0000a95511fe 50 | DTSTART;VALUE=DATE:20130212 51 | SUMMARY:春节假期 52 | DESCRIPTION:假期第4天 / 共7天 53 | END:VEVENT 54 | 55 | BEGIN:VEVENT 56 | UID:20130213-0005-0007-0001-0000a95511fe 57 | DTSTART;VALUE=DATE:20130213 58 | SUMMARY:春节假期 59 | DESCRIPTION:假期第5天 / 共7天 60 | END:VEVENT 61 | 62 | BEGIN:VEVENT 63 | UID:20130214-0006-0007-0001-0000a95511fe 64 | DTSTART;VALUE=DATE:20130214 65 | SUMMARY:春节假期 66 | DESCRIPTION:假期第6天 / 共7天 67 | END:VEVENT 68 | 69 | BEGIN:VEVENT 70 | UID:20130215-0007-0007-0001-0000a95511fe 71 | DTSTART;VALUE=DATE:20130215 72 | SUMMARY:春节假期 73 | DESCRIPTION:假期第7天 / 共7天 74 | END:VEVENT 75 | 76 | BEGIN:VEVENT 77 | UID:20130404-0001-0003-0001-0000a95511fe 78 | DTSTART;VALUE=DATE:20130404 79 | SUMMARY:清明节假期 80 | DESCRIPTION:假期第1天 / 共3天 81 | END:VEVENT 82 | 83 | BEGIN:VEVENT 84 | UID:20130405-0002-0003-0001-0000a95511fe 85 | DTSTART;VALUE=DATE:20130405 86 | SUMMARY:清明节假期 87 | DESCRIPTION:假期第2天 / 共3天 88 | END:VEVENT 89 | 90 | BEGIN:VEVENT 91 | UID:20130406-0003-0003-0001-0000a95511fe 92 | DTSTART;VALUE=DATE:20130406 93 | SUMMARY:清明节假期 94 | DESCRIPTION:假期第3天 / 共3天 95 | END:VEVENT 96 | 97 | BEGIN:VEVENT 98 | UID:20130429-0001-0003-0001-0000a95511fe 99 | DTSTART;VALUE=DATE:20130429 100 | SUMMARY:劳动节假期 101 | DESCRIPTION:假期第1天 / 共3天 102 | END:VEVENT 103 | 104 | BEGIN:VEVENT 105 | UID:20130430-0002-0003-0001-0000a95511fe 106 | DTSTART;VALUE=DATE:20130430 107 | SUMMARY:劳动节假期 108 | DESCRIPTION:假期第2天 / 共3天 109 | END:VEVENT 110 | 111 | BEGIN:VEVENT 112 | UID:20130501-0003-0003-0001-0000a95511fe 113 | DTSTART;VALUE=DATE:20130501 114 | SUMMARY:劳动节假期 115 | DESCRIPTION:假期第3天 / 共3天 116 | END:VEVENT 117 | 118 | BEGIN:VEVENT 119 | UID:20130610-0001-0003-0001-0000a95511fe 120 | DTSTART;VALUE=DATE:20130610 121 | SUMMARY:端午节假期 122 | DESCRIPTION:假期第1天 / 共3天 123 | END:VEVENT 124 | 125 | BEGIN:VEVENT 126 | UID:20130611-0002-0003-0001-0000a95511fe 127 | DTSTART;VALUE=DATE:20130611 128 | SUMMARY:端午节假期 129 | DESCRIPTION:假期第2天 / 共3天 130 | END:VEVENT 131 | 132 | BEGIN:VEVENT 133 | UID:20130612-0003-0003-0001-0000a95511fe 134 | DTSTART;VALUE=DATE:20130612 135 | SUMMARY:端午节假期 136 | DESCRIPTION:假期第3天 / 共3天 137 | END:VEVENT 138 | 139 | BEGIN:VEVENT 140 | UID:20130919-0001-0003-0001-0000a95511fe 141 | DTSTART;VALUE=DATE:20130919 142 | SUMMARY:中秋节假期 143 | DESCRIPTION:假期第1天 / 共3天 144 | END:VEVENT 145 | 146 | BEGIN:VEVENT 147 | UID:20130920-0002-0003-0001-0000a95511fe 148 | DTSTART;VALUE=DATE:20130920 149 | SUMMARY:中秋节假期 150 | DESCRIPTION:假期第2天 / 共3天 151 | END:VEVENT 152 | 153 | BEGIN:VEVENT 154 | UID:20130921-0003-0003-0001-0000a95511fe 155 | DTSTART;VALUE=DATE:20130921 156 | SUMMARY:中秋节假期 157 | DESCRIPTION:假期第3天 / 共3天 158 | END:VEVENT 159 | 160 | BEGIN:VEVENT 161 | UID:20131001-0001-0007-0001-0000a95511fe 162 | DTSTART;VALUE=DATE:20131001 163 | SUMMARY:国庆节假期 164 | DESCRIPTION:假期第1天 / 共7天 165 | END:VEVENT 166 | 167 | BEGIN:VEVENT 168 | UID:20131002-0002-0007-0001-0000a95511fe 169 | DTSTART;VALUE=DATE:20131002 170 | SUMMARY:国庆节假期 171 | DESCRIPTION:假期第2天 / 共7天 172 | END:VEVENT 173 | 174 | BEGIN:VEVENT 175 | UID:20131003-0003-0007-0001-0000a95511fe 176 | DTSTART;VALUE=DATE:20131003 177 | SUMMARY:国庆节假期 178 | DESCRIPTION:假期第3天 / 共7天 179 | END:VEVENT 180 | 181 | BEGIN:VEVENT 182 | UID:20131004-0004-0007-0001-0000a95511fe 183 | DTSTART;VALUE=DATE:20131004 184 | SUMMARY:国庆节假期 185 | DESCRIPTION:假期第4天 / 共7天 186 | END:VEVENT 187 | 188 | BEGIN:VEVENT 189 | UID:20131005-0005-0007-0001-0000a95511fe 190 | DTSTART;VALUE=DATE:20131005 191 | SUMMARY:国庆节假期 192 | DESCRIPTION:假期第5天 / 共7天 193 | END:VEVENT 194 | 195 | BEGIN:VEVENT 196 | UID:20131006-0006-0007-0001-0000a95511fe 197 | DTSTART;VALUE=DATE:20131006 198 | SUMMARY:国庆节假期 199 | DESCRIPTION:假期第6天 / 共7天 200 | END:VEVENT 201 | 202 | BEGIN:VEVENT 203 | UID:20131007-0007-0007-0001-0000a95511fe 204 | DTSTART;VALUE=DATE:20131007 205 | SUMMARY:国庆节假期 206 | DESCRIPTION:假期第7天 / 共7天 207 | END:VEVENT 208 | 209 | BEGIN:VEVENT 210 | UID:20140101-0001-0001-0001-0000a95511fe 211 | DTSTART;VALUE=DATE:20140101 212 | SUMMARY:元旦假期 213 | DESCRIPTION:假期第1天 / 共1天 214 | END:VEVENT 215 | 216 | BEGIN:VEVENT 217 | UID:20140131-0001-0007-0001-0000a95511fe 218 | DTSTART;VALUE=DATE:20140131 219 | SUMMARY:春节假期 220 | DESCRIPTION:假期第1天 / 共7天 221 | END:VEVENT 222 | 223 | BEGIN:VEVENT 224 | UID:20140201-0002-0007-0001-0000a95511fe 225 | DTSTART;VALUE=DATE:20140201 226 | SUMMARY:春节假期 227 | DESCRIPTION:假期第2天 / 共7天 228 | END:VEVENT 229 | 230 | BEGIN:VEVENT 231 | UID:20140202-0003-0007-0001-0000a95511fe 232 | DTSTART;VALUE=DATE:20140202 233 | SUMMARY:春节假期 234 | DESCRIPTION:假期第3天 / 共7天 235 | END:VEVENT 236 | 237 | BEGIN:VEVENT 238 | UID:20140203-0004-0007-0001-0000a95511fe 239 | DTSTART;VALUE=DATE:20140203 240 | SUMMARY:春节假期 241 | DESCRIPTION:假期第4天 / 共7天 242 | END:VEVENT 243 | 244 | BEGIN:VEVENT 245 | UID:20140204-0005-0007-0001-0000a95511fe 246 | DTSTART;VALUE=DATE:20140204 247 | SUMMARY:春节假期 248 | DESCRIPTION:假期第5天 / 共7天 249 | END:VEVENT 250 | 251 | BEGIN:VEVENT 252 | UID:20140205-0006-0007-0001-0000a95511fe 253 | DTSTART;VALUE=DATE:20140205 254 | SUMMARY:春节假期 255 | DESCRIPTION:假期第6天 / 共7天 256 | END:VEVENT 257 | 258 | BEGIN:VEVENT 259 | UID:20140206-0007-0007-0001-0000a95511fe 260 | DTSTART;VALUE=DATE:20140206 261 | SUMMARY:春节假期 262 | DESCRIPTION:假期第7天 / 共7天 263 | END:VEVENT 264 | 265 | BEGIN:VEVENT 266 | UID:20140405-0001-0003-0001-0000a95511fe 267 | DTSTART;VALUE=DATE:20140405 268 | SUMMARY:清明节假期 269 | DESCRIPTION:假期第1天 / 共3天 270 | END:VEVENT 271 | 272 | BEGIN:VEVENT 273 | UID:20140406-0002-0003-0001-0000a95511fe 274 | DTSTART;VALUE=DATE:20140406 275 | SUMMARY:清明节假期 276 | DESCRIPTION:假期第2天 / 共3天 277 | END:VEVENT 278 | 279 | BEGIN:VEVENT 280 | UID:20140407-0003-0003-0001-0000a95511fe 281 | DTSTART;VALUE=DATE:20140407 282 | SUMMARY:清明节假期 283 | DESCRIPTION:假期第3天 / 共3天 284 | END:VEVENT 285 | 286 | BEGIN:VEVENT 287 | UID:20140501-0001-0003-0001-0000a95511fe 288 | DTSTART;VALUE=DATE:20140501 289 | SUMMARY:劳动节假期 290 | DESCRIPTION:假期第1天 / 共3天 291 | END:VEVENT 292 | 293 | BEGIN:VEVENT 294 | UID:20140502-0002-0003-0001-0000a95511fe 295 | DTSTART;VALUE=DATE:20140502 296 | SUMMARY:劳动节假期 297 | DESCRIPTION:假期第2天 / 共3天 298 | END:VEVENT 299 | 300 | BEGIN:VEVENT 301 | UID:20140503-0003-0003-0001-0000a95511fe 302 | DTSTART;VALUE=DATE:20140503 303 | SUMMARY:劳动节假期 304 | DESCRIPTION:假期第3天 / 共3天 305 | END:VEVENT 306 | 307 | BEGIN:VEVENT 308 | UID:20140531-0001-0003-0001-0000a95511fe 309 | DTSTART;VALUE=DATE:20140531 310 | SUMMARY:端午节假期 311 | DESCRIPTION:假期第1天 / 共3天 312 | END:VEVENT 313 | 314 | BEGIN:VEVENT 315 | UID:20140601-0002-0003-0001-0000a95511fe 316 | DTSTART;VALUE=DATE:20140601 317 | SUMMARY:端午节假期 318 | DESCRIPTION:假期第2天 / 共3天 319 | END:VEVENT 320 | 321 | BEGIN:VEVENT 322 | UID:20140602-0003-0003-0001-0000a95511fe 323 | DTSTART;VALUE=DATE:20140602 324 | SUMMARY:端午节假期 325 | DESCRIPTION:假期第3天 / 共3天 326 | END:VEVENT 327 | 328 | BEGIN:VEVENT 329 | UID:20140906-0001-0003-0001-0000a95511fe 330 | DTSTART;VALUE=DATE:20140906 331 | SUMMARY:中秋节假期 332 | DESCRIPTION:假期第1天 / 共3天 333 | END:VEVENT 334 | 335 | BEGIN:VEVENT 336 | UID:20140907-0002-0003-0001-0000a95511fe 337 | DTSTART;VALUE=DATE:20140907 338 | SUMMARY:中秋节假期 339 | DESCRIPTION:假期第2天 / 共3天 340 | END:VEVENT 341 | 342 | BEGIN:VEVENT 343 | UID:20140908-0003-0003-0001-0000a95511fe 344 | DTSTART;VALUE=DATE:20140908 345 | SUMMARY:中秋节假期 346 | DESCRIPTION:假期第3天 / 共3天 347 | END:VEVENT 348 | 349 | BEGIN:VEVENT 350 | UID:20141001-0001-0007-0001-0000a95511fe 351 | DTSTART;VALUE=DATE:20141001 352 | SUMMARY:国庆节假期 353 | DESCRIPTION:假期第1天 / 共7天 354 | END:VEVENT 355 | 356 | BEGIN:VEVENT 357 | UID:20141002-0002-0007-0001-0000a95511fe 358 | DTSTART;VALUE=DATE:20141002 359 | SUMMARY:国庆节假期 360 | DESCRIPTION:假期第2天 / 共7天 361 | END:VEVENT 362 | 363 | BEGIN:VEVENT 364 | UID:20141003-0003-0007-0001-0000a95511fe 365 | DTSTART;VALUE=DATE:20141003 366 | SUMMARY:国庆节假期 367 | DESCRIPTION:假期第3天 / 共7天 368 | END:VEVENT 369 | 370 | BEGIN:VEVENT 371 | UID:20141004-0004-0007-0001-0000a95511fe 372 | DTSTART;VALUE=DATE:20141004 373 | SUMMARY:国庆节假期 374 | DESCRIPTION:假期第4天 / 共7天 375 | END:VEVENT 376 | 377 | BEGIN:VEVENT 378 | UID:20141005-0005-0007-0001-0000a95511fe 379 | DTSTART;VALUE=DATE:20141005 380 | SUMMARY:国庆节假期 381 | DESCRIPTION:假期第5天 / 共7天 382 | END:VEVENT 383 | 384 | BEGIN:VEVENT 385 | UID:20141006-0006-0007-0001-0000a95511fe 386 | DTSTART;VALUE=DATE:20141006 387 | SUMMARY:国庆节假期 388 | DESCRIPTION:假期第6天 / 共7天 389 | END:VEVENT 390 | 391 | BEGIN:VEVENT 392 | UID:20141007-0007-0007-0001-0000a95511fe 393 | DTSTART;VALUE=DATE:20141007 394 | SUMMARY:国庆节假期 395 | DESCRIPTION:假期第7天 / 共7天 396 | END:VEVENT 397 | 398 | BEGIN:VEVENT 399 | UID:20150101-0001-0003-0001-0000a95511fe 400 | DTSTART;VALUE=DATE:20150101 401 | SUMMARY:元旦假期 402 | DESCRIPTION:假期第1天 / 共3天 403 | END:VEVENT 404 | 405 | BEGIN:VEVENT 406 | UID:20150102-0002-0003-0001-0000a95511fe 407 | DTSTART;VALUE=DATE:20150102 408 | SUMMARY:元旦假期 409 | DESCRIPTION:假期第2天 / 共3天 410 | END:VEVENT 411 | 412 | BEGIN:VEVENT 413 | UID:20150103-0003-0003-0001-0000a95511fe 414 | DTSTART;VALUE=DATE:20150103 415 | SUMMARY:元旦假期 416 | DESCRIPTION:假期第3天 / 共3天 417 | END:VEVENT 418 | 419 | BEGIN:VEVENT 420 | UID:20150218-0001-0007-0001-0000a95511fe 421 | DTSTART;VALUE=DATE:20150218 422 | SUMMARY:春节假期 423 | DESCRIPTION:假期第1天 / 共7天 424 | END:VEVENT 425 | 426 | BEGIN:VEVENT 427 | UID:20150219-0002-0007-0001-0000a95511fe 428 | DTSTART;VALUE=DATE:20150219 429 | SUMMARY:春节假期 430 | DESCRIPTION:假期第2天 / 共7天 431 | END:VEVENT 432 | 433 | BEGIN:VEVENT 434 | UID:20150220-0003-0007-0001-0000a95511fe 435 | DTSTART;VALUE=DATE:20150220 436 | SUMMARY:春节假期 437 | DESCRIPTION:假期第3天 / 共7天 438 | END:VEVENT 439 | 440 | BEGIN:VEVENT 441 | UID:20150221-0004-0007-0001-0000a95511fe 442 | DTSTART;VALUE=DATE:20150221 443 | SUMMARY:春节假期 444 | DESCRIPTION:假期第4天 / 共7天 445 | END:VEVENT 446 | 447 | BEGIN:VEVENT 448 | UID:20150222-0005-0007-0001-0000a95511fe 449 | DTSTART;VALUE=DATE:20150222 450 | SUMMARY:春节假期 451 | DESCRIPTION:假期第5天 / 共7天 452 | END:VEVENT 453 | 454 | BEGIN:VEVENT 455 | UID:20150223-0006-0007-0001-0000a95511fe 456 | DTSTART;VALUE=DATE:20150223 457 | SUMMARY:春节假期 458 | DESCRIPTION:假期第6天 / 共7天 459 | END:VEVENT 460 | 461 | BEGIN:VEVENT 462 | UID:20150224-0007-0007-0001-0000a95511fe 463 | DTSTART;VALUE=DATE:20150224 464 | SUMMARY:春节假期 465 | DESCRIPTION:假期第7天 / 共7天 466 | END:VEVENT 467 | 468 | BEGIN:VEVENT 469 | UID:20150404-0001-0003-0001-0000a95511fe 470 | DTSTART;VALUE=DATE:20150404 471 | SUMMARY:清明节假期 472 | DESCRIPTION:假期第1天 / 共3天 473 | END:VEVENT 474 | 475 | BEGIN:VEVENT 476 | UID:20150405-0002-0003-0001-0000a95511fe 477 | DTSTART;VALUE=DATE:20150405 478 | SUMMARY:清明节假期 479 | DESCRIPTION:假期第2天 / 共3天 480 | END:VEVENT 481 | 482 | BEGIN:VEVENT 483 | UID:20150406-0003-0003-0001-0000a95511fe 484 | DTSTART;VALUE=DATE:20150406 485 | SUMMARY:清明节假期 486 | DESCRIPTION:假期第3天 / 共3天 487 | END:VEVENT 488 | 489 | BEGIN:VEVENT 490 | UID:20150501-0001-0003-0001-0000a95511fe 491 | DTSTART;VALUE=DATE:20150501 492 | SUMMARY:劳动节假期 493 | DESCRIPTION:假期第1天 / 共3天 494 | END:VEVENT 495 | 496 | BEGIN:VEVENT 497 | UID:20150502-0002-0003-0001-0000a95511fe 498 | DTSTART;VALUE=DATE:20150502 499 | SUMMARY:劳动节假期 500 | DESCRIPTION:假期第2天 / 共3天 501 | END:VEVENT 502 | 503 | BEGIN:VEVENT 504 | UID:20150503-0003-0003-0001-0000a95511fe 505 | DTSTART;VALUE=DATE:20150503 506 | SUMMARY:劳动节假期 507 | DESCRIPTION:假期第3天 / 共3天 508 | END:VEVENT 509 | 510 | BEGIN:VEVENT 511 | UID:20150620-0001-0003-0001-0000a95511fe 512 | DTSTART;VALUE=DATE:20150620 513 | SUMMARY:端午节假期 514 | DESCRIPTION:假期第1天 / 共3天 515 | END:VEVENT 516 | 517 | BEGIN:VEVENT 518 | UID:20150621-0002-0003-0001-0000a95511fe 519 | DTSTART;VALUE=DATE:20150621 520 | SUMMARY:端午节假期 521 | DESCRIPTION:假期第2天 / 共3天 522 | END:VEVENT 523 | 524 | BEGIN:VEVENT 525 | UID:20150622-0003-0003-0001-0000a95511fe 526 | DTSTART;VALUE=DATE:20150622 527 | SUMMARY:端午节假期 528 | DESCRIPTION:假期第3天 / 共3天 529 | END:VEVENT 530 | 531 | BEGIN:VEVENT 532 | UID:20150927-0001-0001-0001-0000a95511fe 533 | DTSTART;VALUE=DATE:20150927 534 | SUMMARY:中秋节假期 535 | DESCRIPTION:假期第1天 / 共1天 536 | END:VEVENT 537 | 538 | BEGIN:VEVENT 539 | UID:20151001-0001-0007-0001-0000a95511fe 540 | DTSTART;VALUE=DATE:20151001 541 | SUMMARY:国庆节假期 542 | DESCRIPTION:假期第1天 / 共7天 543 | END:VEVENT 544 | 545 | BEGIN:VEVENT 546 | UID:20151002-0002-0007-0001-0000a95511fe 547 | DTSTART;VALUE=DATE:20151002 548 | SUMMARY:国庆节假期 549 | DESCRIPTION:假期第2天 / 共7天 550 | END:VEVENT 551 | 552 | BEGIN:VEVENT 553 | UID:20151003-0003-0007-0001-0000a95511fe 554 | DTSTART;VALUE=DATE:20151003 555 | SUMMARY:国庆节假期 556 | DESCRIPTION:假期第3天 / 共7天 557 | END:VEVENT 558 | 559 | BEGIN:VEVENT 560 | UID:20151004-0004-0007-0001-0000a95511fe 561 | DTSTART;VALUE=DATE:20151004 562 | SUMMARY:国庆节假期 563 | DESCRIPTION:假期第4天 / 共7天 564 | END:VEVENT 565 | 566 | BEGIN:VEVENT 567 | UID:20151005-0005-0007-0001-0000a95511fe 568 | DTSTART;VALUE=DATE:20151005 569 | SUMMARY:国庆节假期 570 | DESCRIPTION:假期第5天 / 共7天 571 | END:VEVENT 572 | 573 | BEGIN:VEVENT 574 | UID:20151006-0006-0007-0001-0000a95511fe 575 | DTSTART;VALUE=DATE:20151006 576 | SUMMARY:国庆节假期 577 | DESCRIPTION:假期第6天 / 共7天 578 | END:VEVENT 579 | 580 | BEGIN:VEVENT 581 | UID:20151007-0007-0007-0001-0000a95511fe 582 | DTSTART;VALUE=DATE:20151007 583 | SUMMARY:国庆节假期 584 | DESCRIPTION:假期第7天 / 共7天 585 | END:VEVENT 586 | 587 | BEGIN:VEVENT 588 | UID:20160101-0001-0003-0001-0000a95511fe 589 | DTSTART;VALUE=DATE:20160101 590 | SUMMARY:元旦假期 591 | DESCRIPTION:假期第1天 / 共3天 592 | END:VEVENT 593 | 594 | BEGIN:VEVENT 595 | UID:20160102-0002-0003-0001-0000a95511fe 596 | DTSTART;VALUE=DATE:20160102 597 | SUMMARY:元旦假期 598 | DESCRIPTION:假期第2天 / 共3天 599 | END:VEVENT 600 | 601 | BEGIN:VEVENT 602 | UID:20160103-0003-0003-0001-0000a95511fe 603 | DTSTART;VALUE=DATE:20160103 604 | SUMMARY:元旦假期 605 | DESCRIPTION:假期第3天 / 共3天 606 | END:VEVENT 607 | 608 | BEGIN:VEVENT 609 | UID:20160207-0001-0007-0001-0000a95511fe 610 | DTSTART;VALUE=DATE:20160207 611 | SUMMARY:春节假期 612 | DESCRIPTION:假期第1天 / 共7天 613 | END:VEVENT 614 | 615 | BEGIN:VEVENT 616 | UID:20160208-0002-0007-0001-0000a95511fe 617 | DTSTART;VALUE=DATE:20160208 618 | SUMMARY:春节假期 619 | DESCRIPTION:假期第2天 / 共7天 620 | END:VEVENT 621 | 622 | BEGIN:VEVENT 623 | UID:20160209-0003-0007-0001-0000a95511fe 624 | DTSTART;VALUE=DATE:20160209 625 | SUMMARY:春节假期 626 | DESCRIPTION:假期第3天 / 共7天 627 | END:VEVENT 628 | 629 | BEGIN:VEVENT 630 | UID:20160210-0004-0007-0001-0000a95511fe 631 | DTSTART;VALUE=DATE:20160210 632 | SUMMARY:春节假期 633 | DESCRIPTION:假期第4天 / 共7天 634 | END:VEVENT 635 | 636 | BEGIN:VEVENT 637 | UID:20160211-0005-0007-0001-0000a95511fe 638 | DTSTART;VALUE=DATE:20160211 639 | SUMMARY:春节假期 640 | DESCRIPTION:假期第5天 / 共7天 641 | END:VEVENT 642 | 643 | BEGIN:VEVENT 644 | UID:20160212-0006-0007-0001-0000a95511fe 645 | DTSTART;VALUE=DATE:20160212 646 | SUMMARY:春节假期 647 | DESCRIPTION:假期第6天 / 共7天 648 | END:VEVENT 649 | 650 | BEGIN:VEVENT 651 | UID:20160213-0007-0007-0001-0000a95511fe 652 | DTSTART;VALUE=DATE:20160213 653 | SUMMARY:春节假期 654 | DESCRIPTION:假期第7天 / 共7天 655 | END:VEVENT 656 | 657 | BEGIN:VEVENT 658 | UID:20160402-0001-0003-0001-0000a95511fe 659 | DTSTART;VALUE=DATE:20160402 660 | SUMMARY:清明节假期 661 | DESCRIPTION:假期第1天 / 共3天 662 | END:VEVENT 663 | 664 | BEGIN:VEVENT 665 | UID:20160403-0002-0003-0001-0000a95511fe 666 | DTSTART;VALUE=DATE:20160403 667 | SUMMARY:清明节假期 668 | DESCRIPTION:假期第2天 / 共3天 669 | END:VEVENT 670 | 671 | BEGIN:VEVENT 672 | UID:20160404-0003-0003-0001-0000a95511fe 673 | DTSTART;VALUE=DATE:20160404 674 | SUMMARY:清明节假期 675 | DESCRIPTION:假期第3天 / 共3天 676 | END:VEVENT 677 | 678 | BEGIN:VEVENT 679 | UID:20160430-0001-0003-0001-0000a95511fe 680 | DTSTART;VALUE=DATE:20160430 681 | SUMMARY:劳动节假期 682 | DESCRIPTION:假期第1天 / 共3天 683 | END:VEVENT 684 | 685 | BEGIN:VEVENT 686 | UID:20160501-0002-0003-0001-0000a95511fe 687 | DTSTART;VALUE=DATE:20160501 688 | SUMMARY:劳动节假期 689 | DESCRIPTION:假期第2天 / 共3天 690 | END:VEVENT 691 | 692 | BEGIN:VEVENT 693 | UID:20160502-0003-0003-0001-0000a95511fe 694 | DTSTART;VALUE=DATE:20160502 695 | SUMMARY:劳动节假期 696 | DESCRIPTION:假期第3天 / 共3天 697 | END:VEVENT 698 | 699 | BEGIN:VEVENT 700 | UID:20160609-0001-0003-0001-0000a95511fe 701 | DTSTART;VALUE=DATE:20160609 702 | SUMMARY:端午节假期 703 | DESCRIPTION:假期第1天 / 共3天 704 | END:VEVENT 705 | 706 | BEGIN:VEVENT 707 | UID:20160610-0002-0003-0001-0000a95511fe 708 | DTSTART;VALUE=DATE:20160610 709 | SUMMARY:端午节假期 710 | DESCRIPTION:假期第2天 / 共3天 711 | END:VEVENT 712 | 713 | BEGIN:VEVENT 714 | UID:20160611-0003-0003-0001-0000a95511fe 715 | DTSTART;VALUE=DATE:20160611 716 | SUMMARY:端午节假期 717 | DESCRIPTION:假期第3天 / 共3天 718 | END:VEVENT 719 | 720 | BEGIN:VEVENT 721 | UID:20160915-0001-0003-0001-0000a95511fe 722 | DTSTART;VALUE=DATE:20160915 723 | SUMMARY:中秋节假期 724 | DESCRIPTION:假期第1天 / 共3天 725 | END:VEVENT 726 | 727 | BEGIN:VEVENT 728 | UID:20160916-0002-0003-0001-0000a95511fe 729 | DTSTART;VALUE=DATE:20160916 730 | SUMMARY:中秋节假期 731 | DESCRIPTION:假期第2天 / 共3天 732 | END:VEVENT 733 | 734 | BEGIN:VEVENT 735 | UID:20160917-0003-0003-0001-0000a95511fe 736 | DTSTART;VALUE=DATE:20160917 737 | SUMMARY:中秋节假期 738 | DESCRIPTION:假期第3天 / 共3天 739 | END:VEVENT 740 | 741 | BEGIN:VEVENT 742 | UID:20161001-0001-0007-0001-0000a95511fe 743 | DTSTART;VALUE=DATE:20161001 744 | SUMMARY:国庆节假期 745 | DESCRIPTION:假期第1天 / 共7天 746 | END:VEVENT 747 | 748 | BEGIN:VEVENT 749 | UID:20161002-0002-0007-0001-0000a95511fe 750 | DTSTART;VALUE=DATE:20161002 751 | SUMMARY:国庆节假期 752 | DESCRIPTION:假期第2天 / 共7天 753 | END:VEVENT 754 | 755 | BEGIN:VEVENT 756 | UID:20161003-0003-0007-0001-0000a95511fe 757 | DTSTART;VALUE=DATE:20161003 758 | SUMMARY:国庆节假期 759 | DESCRIPTION:假期第3天 / 共7天 760 | END:VEVENT 761 | 762 | BEGIN:VEVENT 763 | UID:20161004-0004-0007-0001-0000a95511fe 764 | DTSTART;VALUE=DATE:20161004 765 | SUMMARY:国庆节假期 766 | DESCRIPTION:假期第4天 / 共7天 767 | END:VEVENT 768 | 769 | BEGIN:VEVENT 770 | UID:20161005-0005-0007-0001-0000a95511fe 771 | DTSTART;VALUE=DATE:20161005 772 | SUMMARY:国庆节假期 773 | DESCRIPTION:假期第5天 / 共7天 774 | END:VEVENT 775 | 776 | BEGIN:VEVENT 777 | UID:20161006-0006-0007-0001-0000a95511fe 778 | DTSTART;VALUE=DATE:20161006 779 | SUMMARY:国庆节假期 780 | DESCRIPTION:假期第6天 / 共7天 781 | END:VEVENT 782 | 783 | BEGIN:VEVENT 784 | UID:20161007-0007-0007-0001-0000a95511fe 785 | DTSTART;VALUE=DATE:20161007 786 | SUMMARY:国庆节假期 787 | DESCRIPTION:假期第7天 / 共7天 788 | END:VEVENT 789 | 790 | BEGIN:VEVENT 791 | UID:20161231-0001-0003-0001-0000a95511fe 792 | DTSTART;VALUE=DATE:20161231 793 | SUMMARY:元旦假期 794 | DESCRIPTION:假期第1天 / 共3天 795 | END:VEVENT 796 | 797 | BEGIN:VEVENT 798 | UID:20170101-0002-0003-0001-0000a95511fe 799 | DTSTART;VALUE=DATE:20170101 800 | SUMMARY:元旦假期 801 | DESCRIPTION:假期第2天 / 共3天 802 | END:VEVENT 803 | 804 | BEGIN:VEVENT 805 | UID:20170102-0003-0003-0001-0000a95511fe 806 | DTSTART;VALUE=DATE:20170102 807 | SUMMARY:元旦假期 808 | DESCRIPTION:假期第3天 / 共3天 809 | END:VEVENT 810 | 811 | BEGIN:VEVENT 812 | UID:20170127-0001-0007-0001-0000a95511fe 813 | DTSTART;VALUE=DATE:20170127 814 | SUMMARY:春节假期 815 | DESCRIPTION:假期第1天 / 共7天 816 | END:VEVENT 817 | 818 | BEGIN:VEVENT 819 | UID:20170128-0002-0007-0001-0000a95511fe 820 | DTSTART;VALUE=DATE:20170128 821 | SUMMARY:春节假期 822 | DESCRIPTION:假期第2天 / 共7天 823 | END:VEVENT 824 | 825 | BEGIN:VEVENT 826 | UID:20170129-0003-0007-0001-0000a95511fe 827 | DTSTART;VALUE=DATE:20170129 828 | SUMMARY:春节假期 829 | DESCRIPTION:假期第3天 / 共7天 830 | END:VEVENT 831 | 832 | BEGIN:VEVENT 833 | UID:20170130-0004-0007-0001-0000a95511fe 834 | DTSTART;VALUE=DATE:20170130 835 | SUMMARY:春节假期 836 | DESCRIPTION:假期第4天 / 共7天 837 | END:VEVENT 838 | 839 | BEGIN:VEVENT 840 | UID:20170131-0005-0007-0001-0000a95511fe 841 | DTSTART;VALUE=DATE:20170131 842 | SUMMARY:春节假期 843 | DESCRIPTION:假期第5天 / 共7天 844 | END:VEVENT 845 | 846 | BEGIN:VEVENT 847 | UID:20170201-0006-0007-0001-0000a95511fe 848 | DTSTART;VALUE=DATE:20170201 849 | SUMMARY:春节假期 850 | DESCRIPTION:假期第6天 / 共7天 851 | END:VEVENT 852 | 853 | BEGIN:VEVENT 854 | UID:20170202-0007-0007-0001-0000a95511fe 855 | DTSTART;VALUE=DATE:20170202 856 | SUMMARY:春节假期 857 | DESCRIPTION:假期第7天 / 共7天 858 | END:VEVENT 859 | 860 | BEGIN:VEVENT 861 | UID:20170402-0001-0003-0001-0000a95511fe 862 | DTSTART;VALUE=DATE:20170402 863 | SUMMARY:清明节假期 864 | DESCRIPTION:假期第1天 / 共3天 865 | END:VEVENT 866 | 867 | BEGIN:VEVENT 868 | UID:20170403-0002-0003-0001-0000a95511fe 869 | DTSTART;VALUE=DATE:20170403 870 | SUMMARY:清明节假期 871 | DESCRIPTION:假期第2天 / 共3天 872 | END:VEVENT 873 | 874 | BEGIN:VEVENT 875 | UID:20170404-0003-0003-0001-0000a95511fe 876 | DTSTART;VALUE=DATE:20170404 877 | SUMMARY:清明节假期 878 | DESCRIPTION:假期第3天 / 共3天 879 | END:VEVENT 880 | 881 | BEGIN:VEVENT 882 | UID:20170429-0001-0003-0001-0000a95511fe 883 | DTSTART;VALUE=DATE:20170429 884 | SUMMARY:劳动节假期 885 | DESCRIPTION:假期第1天 / 共3天 886 | END:VEVENT 887 | 888 | BEGIN:VEVENT 889 | UID:20170430-0002-0003-0001-0000a95511fe 890 | DTSTART;VALUE=DATE:20170430 891 | SUMMARY:劳动节假期 892 | DESCRIPTION:假期第2天 / 共3天 893 | END:VEVENT 894 | 895 | BEGIN:VEVENT 896 | UID:20170501-0003-0003-0001-0000a95511fe 897 | DTSTART;VALUE=DATE:20170501 898 | SUMMARY:劳动节假期 899 | DESCRIPTION:假期第3天 / 共3天 900 | END:VEVENT 901 | 902 | BEGIN:VEVENT 903 | UID:20170528-0001-0003-0001-0000a95511fe 904 | DTSTART;VALUE=DATE:20170528 905 | SUMMARY:端午节假期 906 | DESCRIPTION:假期第1天 / 共3天 907 | END:VEVENT 908 | 909 | BEGIN:VEVENT 910 | UID:20170529-0002-0003-0001-0000a95511fe 911 | DTSTART;VALUE=DATE:20170529 912 | SUMMARY:端午节假期 913 | DESCRIPTION:假期第2天 / 共3天 914 | END:VEVENT 915 | 916 | BEGIN:VEVENT 917 | UID:20170530-0003-0003-0001-0000a95511fe 918 | DTSTART;VALUE=DATE:20170530 919 | SUMMARY:端午节假期 920 | DESCRIPTION:假期第3天 / 共3天 921 | END:VEVENT 922 | 923 | BEGIN:VEVENT 924 | UID:20171001-0001-0008-0001-0000a95511fe 925 | DTSTART;VALUE=DATE:20171001 926 | SUMMARY:中秋节、国庆节假期 927 | DESCRIPTION:假期第1天 / 共8天 928 | END:VEVENT 929 | 930 | BEGIN:VEVENT 931 | UID:20171002-0002-0008-0001-0000a95511fe 932 | DTSTART;VALUE=DATE:20171002 933 | SUMMARY:中秋节、国庆节假期 934 | DESCRIPTION:假期第2天 / 共8天 935 | END:VEVENT 936 | 937 | BEGIN:VEVENT 938 | UID:20171003-0003-0008-0001-0000a95511fe 939 | DTSTART;VALUE=DATE:20171003 940 | SUMMARY:中秋节、国庆节假期 941 | DESCRIPTION:假期第3天 / 共8天 942 | END:VEVENT 943 | 944 | BEGIN:VEVENT 945 | UID:20171004-0004-0008-0001-0000a95511fe 946 | DTSTART;VALUE=DATE:20171004 947 | SUMMARY:中秋节、国庆节假期 948 | DESCRIPTION:假期第4天 / 共8天 949 | END:VEVENT 950 | 951 | BEGIN:VEVENT 952 | UID:20171005-0005-0008-0001-0000a95511fe 953 | DTSTART;VALUE=DATE:20171005 954 | SUMMARY:中秋节、国庆节假期 955 | DESCRIPTION:假期第5天 / 共8天 956 | END:VEVENT 957 | 958 | BEGIN:VEVENT 959 | UID:20171006-0006-0008-0001-0000a95511fe 960 | DTSTART;VALUE=DATE:20171006 961 | SUMMARY:中秋节、国庆节假期 962 | DESCRIPTION:假期第6天 / 共8天 963 | END:VEVENT 964 | 965 | BEGIN:VEVENT 966 | UID:20171007-0007-0008-0001-0000a95511fe 967 | DTSTART;VALUE=DATE:20171007 968 | SUMMARY:中秋节、国庆节假期 969 | DESCRIPTION:假期第7天 / 共8天 970 | END:VEVENT 971 | 972 | BEGIN:VEVENT 973 | UID:20171008-0008-0008-0001-0000a95511fe 974 | DTSTART;VALUE=DATE:20171008 975 | SUMMARY:中秋节、国庆节假期 976 | DESCRIPTION:假期第8天 / 共8天 977 | END:VEVENT 978 | 979 | BEGIN:VEVENT 980 | UID:20171230-0001-0003-0001-0000a95511fe 981 | DTSTART;VALUE=DATE:20171230 982 | SUMMARY:元旦假期 983 | DESCRIPTION:假期第1天 / 共3天 984 | END:VEVENT 985 | 986 | BEGIN:VEVENT 987 | UID:20171231-0002-0003-0001-0000a95511fe 988 | DTSTART;VALUE=DATE:20171231 989 | SUMMARY:元旦假期 990 | DESCRIPTION:假期第2天 / 共3天 991 | END:VEVENT 992 | 993 | BEGIN:VEVENT 994 | UID:20180101-0003-0003-0001-0000a95511fe 995 | DTSTART;VALUE=DATE:20180101 996 | SUMMARY:元旦假期 997 | DESCRIPTION:假期第3天 / 共3天 998 | END:VEVENT 999 | 1000 | BEGIN:VEVENT 1001 | UID:20180215-0001-0007-0001-0000a95511fe 1002 | DTSTART;VALUE=DATE:20180215 1003 | SUMMARY:春节假期 1004 | DESCRIPTION:假期第1天 / 共7天 1005 | END:VEVENT 1006 | 1007 | BEGIN:VEVENT 1008 | UID:20180216-0002-0007-0001-0000a95511fe 1009 | DTSTART;VALUE=DATE:20180216 1010 | SUMMARY:春节假期 1011 | DESCRIPTION:假期第2天 / 共7天 1012 | END:VEVENT 1013 | 1014 | BEGIN:VEVENT 1015 | UID:20180217-0003-0007-0001-0000a95511fe 1016 | DTSTART;VALUE=DATE:20180217 1017 | SUMMARY:春节假期 1018 | DESCRIPTION:假期第3天 / 共7天 1019 | END:VEVENT 1020 | 1021 | BEGIN:VEVENT 1022 | UID:20180218-0004-0007-0001-0000a95511fe 1023 | DTSTART;VALUE=DATE:20180218 1024 | SUMMARY:春节假期 1025 | DESCRIPTION:假期第4天 / 共7天 1026 | END:VEVENT 1027 | 1028 | BEGIN:VEVENT 1029 | UID:20180219-0005-0007-0001-0000a95511fe 1030 | DTSTART;VALUE=DATE:20180219 1031 | SUMMARY:春节假期 1032 | DESCRIPTION:假期第5天 / 共7天 1033 | END:VEVENT 1034 | 1035 | BEGIN:VEVENT 1036 | UID:20180220-0006-0007-0001-0000a95511fe 1037 | DTSTART;VALUE=DATE:20180220 1038 | SUMMARY:春节假期 1039 | DESCRIPTION:假期第6天 / 共7天 1040 | END:VEVENT 1041 | 1042 | BEGIN:VEVENT 1043 | UID:20180221-0007-0007-0001-0000a95511fe 1044 | DTSTART;VALUE=DATE:20180221 1045 | SUMMARY:春节假期 1046 | DESCRIPTION:假期第7天 / 共7天 1047 | END:VEVENT 1048 | 1049 | BEGIN:VEVENT 1050 | UID:20180405-0001-0003-0001-0000a95511fe 1051 | DTSTART;VALUE=DATE:20180405 1052 | SUMMARY:清明节假期 1053 | DESCRIPTION:假期第1天 / 共3天 1054 | END:VEVENT 1055 | 1056 | BEGIN:VEVENT 1057 | UID:20180406-0002-0003-0001-0000a95511fe 1058 | DTSTART;VALUE=DATE:20180406 1059 | SUMMARY:清明节假期 1060 | DESCRIPTION:假期第2天 / 共3天 1061 | END:VEVENT 1062 | 1063 | BEGIN:VEVENT 1064 | UID:20180407-0003-0003-0001-0000a95511fe 1065 | DTSTART;VALUE=DATE:20180407 1066 | SUMMARY:清明节假期 1067 | DESCRIPTION:假期第3天 / 共3天 1068 | END:VEVENT 1069 | 1070 | BEGIN:VEVENT 1071 | UID:20180429-0001-0003-0001-0000a95511fe 1072 | DTSTART;VALUE=DATE:20180429 1073 | SUMMARY:劳动节假期 1074 | DESCRIPTION:假期第1天 / 共3天 1075 | END:VEVENT 1076 | 1077 | BEGIN:VEVENT 1078 | UID:20180430-0002-0003-0001-0000a95511fe 1079 | DTSTART;VALUE=DATE:20180430 1080 | SUMMARY:劳动节假期 1081 | DESCRIPTION:假期第2天 / 共3天 1082 | END:VEVENT 1083 | 1084 | BEGIN:VEVENT 1085 | UID:20180501-0003-0003-0001-0000a95511fe 1086 | DTSTART;VALUE=DATE:20180501 1087 | SUMMARY:劳动节假期 1088 | DESCRIPTION:假期第3天 / 共3天 1089 | END:VEVENT 1090 | 1091 | BEGIN:VEVENT 1092 | UID:20180616-0001-0003-0001-0000a95511fe 1093 | DTSTART;VALUE=DATE:20180616 1094 | SUMMARY:端午节假期 1095 | DESCRIPTION:假期第1天 / 共3天 1096 | END:VEVENT 1097 | 1098 | BEGIN:VEVENT 1099 | UID:20180617-0002-0003-0001-0000a95511fe 1100 | DTSTART;VALUE=DATE:20180617 1101 | SUMMARY:端午节假期 1102 | DESCRIPTION:假期第2天 / 共3天 1103 | END:VEVENT 1104 | 1105 | BEGIN:VEVENT 1106 | UID:20180618-0003-0003-0001-0000a95511fe 1107 | DTSTART;VALUE=DATE:20180618 1108 | SUMMARY:端午节假期 1109 | DESCRIPTION:假期第3天 / 共3天 1110 | END:VEVENT 1111 | 1112 | BEGIN:VEVENT 1113 | UID:20180922-0001-0003-0001-0000a95511fe 1114 | DTSTART;VALUE=DATE:20180922 1115 | SUMMARY:中秋节假期 1116 | DESCRIPTION:假期第1天 / 共3天 1117 | END:VEVENT 1118 | 1119 | BEGIN:VEVENT 1120 | UID:20180923-0002-0003-0001-0000a95511fe 1121 | DTSTART;VALUE=DATE:20180923 1122 | SUMMARY:中秋节假期 1123 | DESCRIPTION:假期第2天 / 共3天 1124 | END:VEVENT 1125 | 1126 | BEGIN:VEVENT 1127 | UID:20180924-0003-0003-0001-0000a95511fe 1128 | DTSTART;VALUE=DATE:20180924 1129 | SUMMARY:中秋节假期 1130 | DESCRIPTION:假期第3天 / 共3天 1131 | END:VEVENT 1132 | 1133 | BEGIN:VEVENT 1134 | UID:20181001-0001-0007-0001-0000a95511fe 1135 | DTSTART;VALUE=DATE:20181001 1136 | SUMMARY:国庆节假期 1137 | DESCRIPTION:假期第1天 / 共7天 1138 | END:VEVENT 1139 | 1140 | BEGIN:VEVENT 1141 | UID:20181002-0002-0007-0001-0000a95511fe 1142 | DTSTART;VALUE=DATE:20181002 1143 | SUMMARY:国庆节假期 1144 | DESCRIPTION:假期第2天 / 共7天 1145 | END:VEVENT 1146 | 1147 | BEGIN:VEVENT 1148 | UID:20181003-0003-0007-0001-0000a95511fe 1149 | DTSTART;VALUE=DATE:20181003 1150 | SUMMARY:国庆节假期 1151 | DESCRIPTION:假期第3天 / 共7天 1152 | END:VEVENT 1153 | 1154 | BEGIN:VEVENT 1155 | UID:20181004-0004-0007-0001-0000a95511fe 1156 | DTSTART;VALUE=DATE:20181004 1157 | SUMMARY:国庆节假期 1158 | DESCRIPTION:假期第4天 / 共7天 1159 | END:VEVENT 1160 | 1161 | BEGIN:VEVENT 1162 | UID:20181005-0005-0007-0001-0000a95511fe 1163 | DTSTART;VALUE=DATE:20181005 1164 | SUMMARY:国庆节假期 1165 | DESCRIPTION:假期第5天 / 共7天 1166 | END:VEVENT 1167 | 1168 | BEGIN:VEVENT 1169 | UID:20181006-0006-0007-0001-0000a95511fe 1170 | DTSTART;VALUE=DATE:20181006 1171 | SUMMARY:国庆节假期 1172 | DESCRIPTION:假期第6天 / 共7天 1173 | END:VEVENT 1174 | 1175 | BEGIN:VEVENT 1176 | UID:20181007-0007-0007-0001-0000a95511fe 1177 | DTSTART;VALUE=DATE:20181007 1178 | SUMMARY:国庆节假期 1179 | DESCRIPTION:假期第7天 / 共7天 1180 | END:VEVENT 1181 | 1182 | BEGIN:VEVENT 1183 | UID:20181230-0001-0003-0001-0000a95511fe 1184 | DTSTART;VALUE=DATE:20181230 1185 | SUMMARY:元旦假期 1186 | DESCRIPTION:假期第1天 / 共3天 1187 | END:VEVENT 1188 | 1189 | BEGIN:VEVENT 1190 | UID:20181231-0002-0003-0001-0000a95511fe 1191 | DTSTART;VALUE=DATE:20181231 1192 | SUMMARY:元旦假期 1193 | DESCRIPTION:假期第2天 / 共3天 1194 | END:VEVENT 1195 | 1196 | BEGIN:VEVENT 1197 | UID:20190101-0003-0003-0001-0000a95511fe 1198 | DTSTART;VALUE=DATE:20190101 1199 | SUMMARY:元旦假期 1200 | DESCRIPTION:假期第3天 / 共3天 1201 | END:VEVENT 1202 | 1203 | BEGIN:VEVENT 1204 | UID:20190204-0001-0007-0001-0000a95511fe 1205 | DTSTART;VALUE=DATE:20190204 1206 | SUMMARY:春节假期 1207 | DESCRIPTION:假期第1天 / 共7天 1208 | END:VEVENT 1209 | 1210 | BEGIN:VEVENT 1211 | UID:20190205-0002-0007-0001-0000a95511fe 1212 | DTSTART;VALUE=DATE:20190205 1213 | SUMMARY:春节假期 1214 | DESCRIPTION:假期第2天 / 共7天 1215 | END:VEVENT 1216 | 1217 | BEGIN:VEVENT 1218 | UID:20190206-0003-0007-0001-0000a95511fe 1219 | DTSTART;VALUE=DATE:20190206 1220 | SUMMARY:春节假期 1221 | DESCRIPTION:假期第3天 / 共7天 1222 | END:VEVENT 1223 | 1224 | BEGIN:VEVENT 1225 | UID:20190207-0004-0007-0001-0000a95511fe 1226 | DTSTART;VALUE=DATE:20190207 1227 | SUMMARY:春节假期 1228 | DESCRIPTION:假期第4天 / 共7天 1229 | END:VEVENT 1230 | 1231 | BEGIN:VEVENT 1232 | UID:20190208-0005-0007-0001-0000a95511fe 1233 | DTSTART;VALUE=DATE:20190208 1234 | SUMMARY:春节假期 1235 | DESCRIPTION:假期第5天 / 共7天 1236 | END:VEVENT 1237 | 1238 | BEGIN:VEVENT 1239 | UID:20190209-0006-0007-0001-0000a95511fe 1240 | DTSTART;VALUE=DATE:20190209 1241 | SUMMARY:春节假期 1242 | DESCRIPTION:假期第6天 / 共7天 1243 | END:VEVENT 1244 | 1245 | BEGIN:VEVENT 1246 | UID:20190210-0007-0007-0001-0000a95511fe 1247 | DTSTART;VALUE=DATE:20190210 1248 | SUMMARY:春节假期 1249 | DESCRIPTION:假期第7天 / 共7天 1250 | END:VEVENT 1251 | 1252 | BEGIN:VEVENT 1253 | UID:20190405-0001-0003-0001-0000a95511fe 1254 | DTSTART;VALUE=DATE:20190405 1255 | SUMMARY:清明节假期 1256 | DESCRIPTION:假期第1天 / 共3天 1257 | END:VEVENT 1258 | 1259 | BEGIN:VEVENT 1260 | UID:20190406-0002-0003-0001-0000a95511fe 1261 | DTSTART;VALUE=DATE:20190406 1262 | SUMMARY:清明节假期 1263 | DESCRIPTION:假期第2天 / 共3天 1264 | END:VEVENT 1265 | 1266 | BEGIN:VEVENT 1267 | UID:20190407-0003-0003-0001-0000a95511fe 1268 | DTSTART;VALUE=DATE:20190407 1269 | SUMMARY:清明节假期 1270 | DESCRIPTION:假期第3天 / 共3天 1271 | END:VEVENT 1272 | 1273 | BEGIN:VEVENT 1274 | UID:20190501-0001-0001-0001-0000a95511fe 1275 | DTSTART;VALUE=DATE:20190501 1276 | SUMMARY:劳动节假期 1277 | DESCRIPTION:假期第1天 / 共1天 1278 | END:VEVENT 1279 | 1280 | BEGIN:VEVENT 1281 | UID:20190607-0001-0003-0001-0000a95511fe 1282 | DTSTART;VALUE=DATE:20190607 1283 | SUMMARY:端午节假期 1284 | DESCRIPTION:假期第1天 / 共3天 1285 | END:VEVENT 1286 | 1287 | BEGIN:VEVENT 1288 | UID:20190608-0002-0003-0001-0000a95511fe 1289 | DTSTART;VALUE=DATE:20190608 1290 | SUMMARY:端午节假期 1291 | DESCRIPTION:假期第2天 / 共3天 1292 | END:VEVENT 1293 | 1294 | BEGIN:VEVENT 1295 | UID:20190609-0003-0003-0001-0000a95511fe 1296 | DTSTART;VALUE=DATE:20190609 1297 | SUMMARY:端午节假期 1298 | DESCRIPTION:假期第3天 / 共3天 1299 | END:VEVENT 1300 | 1301 | BEGIN:VEVENT 1302 | UID:20190913-0001-0003-0001-0000a95511fe 1303 | DTSTART;VALUE=DATE:20190913 1304 | SUMMARY:中秋节假期 1305 | DESCRIPTION:假期第1天 / 共3天 1306 | END:VEVENT 1307 | 1308 | BEGIN:VEVENT 1309 | UID:20190914-0002-0003-0001-0000a95511fe 1310 | DTSTART;VALUE=DATE:20190914 1311 | SUMMARY:中秋节假期 1312 | DESCRIPTION:假期第2天 / 共3天 1313 | END:VEVENT 1314 | 1315 | BEGIN:VEVENT 1316 | UID:20190915-0003-0003-0001-0000a95511fe 1317 | DTSTART;VALUE=DATE:20190915 1318 | SUMMARY:中秋节假期 1319 | DESCRIPTION:假期第3天 / 共3天 1320 | END:VEVENT 1321 | 1322 | BEGIN:VEVENT 1323 | UID:20191001-0001-0007-0001-0000a95511fe 1324 | DTSTART;VALUE=DATE:20191001 1325 | SUMMARY:国庆节假期 1326 | DESCRIPTION:假期第1天 / 共7天 1327 | END:VEVENT 1328 | 1329 | BEGIN:VEVENT 1330 | UID:20191002-0002-0007-0001-0000a95511fe 1331 | DTSTART;VALUE=DATE:20191002 1332 | SUMMARY:国庆节假期 1333 | DESCRIPTION:假期第2天 / 共7天 1334 | END:VEVENT 1335 | 1336 | BEGIN:VEVENT 1337 | UID:20191003-0003-0007-0001-0000a95511fe 1338 | DTSTART;VALUE=DATE:20191003 1339 | SUMMARY:国庆节假期 1340 | DESCRIPTION:假期第3天 / 共7天 1341 | END:VEVENT 1342 | 1343 | BEGIN:VEVENT 1344 | UID:20191004-0004-0007-0001-0000a95511fe 1345 | DTSTART;VALUE=DATE:20191004 1346 | SUMMARY:国庆节假期 1347 | DESCRIPTION:假期第4天 / 共7天 1348 | END:VEVENT 1349 | 1350 | BEGIN:VEVENT 1351 | UID:20191005-0005-0007-0001-0000a95511fe 1352 | DTSTART;VALUE=DATE:20191005 1353 | SUMMARY:国庆节假期 1354 | DESCRIPTION:假期第5天 / 共7天 1355 | END:VEVENT 1356 | 1357 | BEGIN:VEVENT 1358 | UID:20191006-0006-0007-0001-0000a95511fe 1359 | DTSTART;VALUE=DATE:20191006 1360 | SUMMARY:国庆节假期 1361 | DESCRIPTION:假期第6天 / 共7天 1362 | END:VEVENT 1363 | 1364 | BEGIN:VEVENT 1365 | UID:20191007-0007-0007-0001-0000a95511fe 1366 | DTSTART;VALUE=DATE:20191007 1367 | SUMMARY:国庆节假期 1368 | DESCRIPTION:假期第7天 / 共7天 1369 | END:VEVENT 1370 | 1371 | BEGIN:VEVENT 1372 | UID:20200101-0001-0001-0001-0000a95511fe 1373 | DTSTART;VALUE=DATE:20200101 1374 | SUMMARY:元旦假期 1375 | DESCRIPTION:假期第1天 / 共1天 1376 | END:VEVENT 1377 | 1378 | BEGIN:VEVENT 1379 | UID:20200124-0001-0007-0001-0000a95511fe 1380 | DTSTART;VALUE=DATE:20200124 1381 | SUMMARY:春节假期 1382 | DESCRIPTION:假期第1天 / 共7天 1383 | END:VEVENT 1384 | 1385 | BEGIN:VEVENT 1386 | UID:20200125-0002-0007-0001-0000a95511fe 1387 | DTSTART;VALUE=DATE:20200125 1388 | SUMMARY:春节假期 1389 | DESCRIPTION:假期第2天 / 共7天 1390 | END:VEVENT 1391 | 1392 | BEGIN:VEVENT 1393 | UID:20200126-0003-0007-0001-0000a95511fe 1394 | DTSTART;VALUE=DATE:20200126 1395 | SUMMARY:春节假期 1396 | DESCRIPTION:假期第3天 / 共7天 1397 | END:VEVENT 1398 | 1399 | BEGIN:VEVENT 1400 | UID:20200127-0004-0007-0001-0000a95511fe 1401 | DTSTART;VALUE=DATE:20200127 1402 | SUMMARY:春节假期 1403 | DESCRIPTION:假期第4天 / 共7天 1404 | END:VEVENT 1405 | 1406 | BEGIN:VEVENT 1407 | UID:20200128-0005-0007-0001-0000a95511fe 1408 | DTSTART;VALUE=DATE:20200128 1409 | SUMMARY:春节假期 1410 | DESCRIPTION:假期第5天 / 共7天 1411 | END:VEVENT 1412 | 1413 | BEGIN:VEVENT 1414 | UID:20200129-0006-0007-0001-0000a95511fe 1415 | DTSTART;VALUE=DATE:20200129 1416 | SUMMARY:春节假期 1417 | DESCRIPTION:假期第6天 / 共7天 1418 | END:VEVENT 1419 | 1420 | BEGIN:VEVENT 1421 | UID:20200130-0007-0007-0001-0000a95511fe 1422 | DTSTART;VALUE=DATE:20200130 1423 | SUMMARY:春节假期 1424 | DESCRIPTION:假期第7天 / 共7天 1425 | END:VEVENT 1426 | 1427 | BEGIN:VEVENT 1428 | UID:20200404-0001-0003-0001-0000a95511fe 1429 | DTSTART;VALUE=DATE:20200404 1430 | SUMMARY:清明节假期 1431 | DESCRIPTION:假期第1天 / 共3天 1432 | END:VEVENT 1433 | 1434 | BEGIN:VEVENT 1435 | UID:20200405-0002-0003-0001-0000a95511fe 1436 | DTSTART;VALUE=DATE:20200405 1437 | SUMMARY:清明节假期 1438 | DESCRIPTION:假期第2天 / 共3天 1439 | END:VEVENT 1440 | 1441 | BEGIN:VEVENT 1442 | UID:20200406-0003-0003-0001-0000a95511fe 1443 | DTSTART;VALUE=DATE:20200406 1444 | SUMMARY:清明节假期 1445 | DESCRIPTION:假期第3天 / 共3天 1446 | END:VEVENT 1447 | 1448 | BEGIN:VEVENT 1449 | UID:20200501-0001-0005-0001-0000a95511fe 1450 | DTSTART;VALUE=DATE:20200501 1451 | SUMMARY:劳动节假期 1452 | DESCRIPTION:假期第1天 / 共5天 1453 | END:VEVENT 1454 | 1455 | BEGIN:VEVENT 1456 | UID:20200502-0002-0005-0001-0000a95511fe 1457 | DTSTART;VALUE=DATE:20200502 1458 | SUMMARY:劳动节假期 1459 | DESCRIPTION:假期第2天 / 共5天 1460 | END:VEVENT 1461 | 1462 | BEGIN:VEVENT 1463 | UID:20200503-0003-0005-0001-0000a95511fe 1464 | DTSTART;VALUE=DATE:20200503 1465 | SUMMARY:劳动节假期 1466 | DESCRIPTION:假期第3天 / 共5天 1467 | END:VEVENT 1468 | 1469 | BEGIN:VEVENT 1470 | UID:20200504-0004-0005-0001-0000a95511fe 1471 | DTSTART;VALUE=DATE:20200504 1472 | SUMMARY:劳动节假期 1473 | DESCRIPTION:假期第4天 / 共5天 1474 | END:VEVENT 1475 | 1476 | BEGIN:VEVENT 1477 | UID:20200505-0005-0005-0001-0000a95511fe 1478 | DTSTART;VALUE=DATE:20200505 1479 | SUMMARY:劳动节假期 1480 | DESCRIPTION:假期第5天 / 共5天 1481 | END:VEVENT 1482 | 1483 | BEGIN:VEVENT 1484 | UID:20200625-0001-0003-0001-0000a95511fe 1485 | DTSTART;VALUE=DATE:20200625 1486 | SUMMARY:端午节假期 1487 | DESCRIPTION:假期第1天 / 共3天 1488 | END:VEVENT 1489 | 1490 | BEGIN:VEVENT 1491 | UID:20200626-0002-0003-0001-0000a95511fe 1492 | DTSTART;VALUE=DATE:20200626 1493 | SUMMARY:端午节假期 1494 | DESCRIPTION:假期第2天 / 共3天 1495 | END:VEVENT 1496 | 1497 | BEGIN:VEVENT 1498 | UID:20200627-0003-0003-0001-0000a95511fe 1499 | DTSTART;VALUE=DATE:20200627 1500 | SUMMARY:端午节假期 1501 | DESCRIPTION:假期第3天 / 共3天 1502 | END:VEVENT 1503 | 1504 | BEGIN:VEVENT 1505 | UID:20201001-0001-0008-0001-0000a95511fe 1506 | DTSTART;VALUE=DATE:20201001 1507 | SUMMARY:国庆节、中秋节假期 1508 | DESCRIPTION:假期第1天 / 共8天 1509 | END:VEVENT 1510 | 1511 | BEGIN:VEVENT 1512 | UID:20201002-0002-0008-0001-0000a95511fe 1513 | DTSTART;VALUE=DATE:20201002 1514 | SUMMARY:国庆节、中秋节假期 1515 | DESCRIPTION:假期第2天 / 共8天 1516 | END:VEVENT 1517 | 1518 | BEGIN:VEVENT 1519 | UID:20201003-0003-0008-0001-0000a95511fe 1520 | DTSTART;VALUE=DATE:20201003 1521 | SUMMARY:国庆节、中秋节假期 1522 | DESCRIPTION:假期第3天 / 共8天 1523 | END:VEVENT 1524 | 1525 | BEGIN:VEVENT 1526 | UID:20201004-0004-0008-0001-0000a95511fe 1527 | DTSTART;VALUE=DATE:20201004 1528 | SUMMARY:国庆节、中秋节假期 1529 | DESCRIPTION:假期第4天 / 共8天 1530 | END:VEVENT 1531 | 1532 | BEGIN:VEVENT 1533 | UID:20201005-0005-0008-0001-0000a95511fe 1534 | DTSTART;VALUE=DATE:20201005 1535 | SUMMARY:国庆节、中秋节假期 1536 | DESCRIPTION:假期第5天 / 共8天 1537 | END:VEVENT 1538 | 1539 | BEGIN:VEVENT 1540 | UID:20201006-0006-0008-0001-0000a95511fe 1541 | DTSTART;VALUE=DATE:20201006 1542 | SUMMARY:国庆节、中秋节假期 1543 | DESCRIPTION:假期第6天 / 共8天 1544 | END:VEVENT 1545 | 1546 | BEGIN:VEVENT 1547 | UID:20201007-0007-0008-0001-0000a95511fe 1548 | DTSTART;VALUE=DATE:20201007 1549 | SUMMARY:国庆节、中秋节假期 1550 | DESCRIPTION:假期第7天 / 共8天 1551 | END:VEVENT 1552 | 1553 | BEGIN:VEVENT 1554 | UID:20201008-0008-0008-0001-0000a95511fe 1555 | DTSTART;VALUE=DATE:20201008 1556 | SUMMARY:国庆节、中秋节假期 1557 | DESCRIPTION:假期第8天 / 共8天 1558 | END:VEVENT 1559 | 1560 | BEGIN:VEVENT 1561 | UID:20210101-0001-0003-0001-0000a95511fe 1562 | DTSTART;VALUE=DATE:20210101 1563 | SUMMARY:元旦假期 1564 | DESCRIPTION:假期第1天 / 共3天 1565 | END:VEVENT 1566 | 1567 | BEGIN:VEVENT 1568 | UID:20210102-0002-0003-0001-0000a95511fe 1569 | DTSTART;VALUE=DATE:20210102 1570 | SUMMARY:元旦假期 1571 | DESCRIPTION:假期第2天 / 共3天 1572 | END:VEVENT 1573 | 1574 | BEGIN:VEVENT 1575 | UID:20210103-0003-0003-0001-0000a95511fe 1576 | DTSTART;VALUE=DATE:20210103 1577 | SUMMARY:元旦假期 1578 | DESCRIPTION:假期第3天 / 共3天 1579 | END:VEVENT 1580 | 1581 | BEGIN:VEVENT 1582 | UID:20210211-0001-0007-0001-0000a95511fe 1583 | DTSTART;VALUE=DATE:20210211 1584 | SUMMARY:春节假期 1585 | DESCRIPTION:假期第1天 / 共7天 1586 | END:VEVENT 1587 | 1588 | BEGIN:VEVENT 1589 | UID:20210212-0002-0007-0001-0000a95511fe 1590 | DTSTART;VALUE=DATE:20210212 1591 | SUMMARY:春节假期 1592 | DESCRIPTION:假期第2天 / 共7天 1593 | END:VEVENT 1594 | 1595 | BEGIN:VEVENT 1596 | UID:20210213-0003-0007-0001-0000a95511fe 1597 | DTSTART;VALUE=DATE:20210213 1598 | SUMMARY:春节假期 1599 | DESCRIPTION:假期第3天 / 共7天 1600 | END:VEVENT 1601 | 1602 | BEGIN:VEVENT 1603 | UID:20210214-0004-0007-0001-0000a95511fe 1604 | DTSTART;VALUE=DATE:20210214 1605 | SUMMARY:春节假期 1606 | DESCRIPTION:假期第4天 / 共7天 1607 | END:VEVENT 1608 | 1609 | BEGIN:VEVENT 1610 | UID:20210215-0005-0007-0001-0000a95511fe 1611 | DTSTART;VALUE=DATE:20210215 1612 | SUMMARY:春节假期 1613 | DESCRIPTION:假期第5天 / 共7天 1614 | END:VEVENT 1615 | 1616 | BEGIN:VEVENT 1617 | UID:20210216-0006-0007-0001-0000a95511fe 1618 | DTSTART;VALUE=DATE:20210216 1619 | SUMMARY:春节假期 1620 | DESCRIPTION:假期第6天 / 共7天 1621 | END:VEVENT 1622 | 1623 | BEGIN:VEVENT 1624 | UID:20210217-0007-0007-0001-0000a95511fe 1625 | DTSTART;VALUE=DATE:20210217 1626 | SUMMARY:春节假期 1627 | DESCRIPTION:假期第7天 / 共7天 1628 | END:VEVENT 1629 | 1630 | BEGIN:VEVENT 1631 | UID:20210403-0001-0003-0001-0000a95511fe 1632 | DTSTART;VALUE=DATE:20210403 1633 | SUMMARY:清明节假期 1634 | DESCRIPTION:假期第1天 / 共3天 1635 | END:VEVENT 1636 | 1637 | BEGIN:VEVENT 1638 | UID:20210404-0002-0003-0001-0000a95511fe 1639 | DTSTART;VALUE=DATE:20210404 1640 | SUMMARY:清明节假期 1641 | DESCRIPTION:假期第2天 / 共3天 1642 | END:VEVENT 1643 | 1644 | BEGIN:VEVENT 1645 | UID:20210405-0003-0003-0001-0000a95511fe 1646 | DTSTART;VALUE=DATE:20210405 1647 | SUMMARY:清明节假期 1648 | DESCRIPTION:假期第3天 / 共3天 1649 | END:VEVENT 1650 | 1651 | BEGIN:VEVENT 1652 | UID:20210501-0001-0005-0001-0000a95511fe 1653 | DTSTART;VALUE=DATE:20210501 1654 | SUMMARY:劳动节假期 1655 | DESCRIPTION:假期第1天 / 共5天 1656 | END:VEVENT 1657 | 1658 | BEGIN:VEVENT 1659 | UID:20210502-0002-0005-0001-0000a95511fe 1660 | DTSTART;VALUE=DATE:20210502 1661 | SUMMARY:劳动节假期 1662 | DESCRIPTION:假期第2天 / 共5天 1663 | END:VEVENT 1664 | 1665 | BEGIN:VEVENT 1666 | UID:20210503-0003-0005-0001-0000a95511fe 1667 | DTSTART;VALUE=DATE:20210503 1668 | SUMMARY:劳动节假期 1669 | DESCRIPTION:假期第3天 / 共5天 1670 | END:VEVENT 1671 | 1672 | BEGIN:VEVENT 1673 | UID:20210504-0004-0005-0001-0000a95511fe 1674 | DTSTART;VALUE=DATE:20210504 1675 | SUMMARY:劳动节假期 1676 | DESCRIPTION:假期第4天 / 共5天 1677 | END:VEVENT 1678 | 1679 | BEGIN:VEVENT 1680 | UID:20210505-0005-0005-0001-0000a95511fe 1681 | DTSTART;VALUE=DATE:20210505 1682 | SUMMARY:劳动节假期 1683 | DESCRIPTION:假期第5天 / 共5天 1684 | END:VEVENT 1685 | 1686 | BEGIN:VEVENT 1687 | UID:20210612-0001-0003-0001-0000a95511fe 1688 | DTSTART;VALUE=DATE:20210612 1689 | SUMMARY:端午节假期 1690 | DESCRIPTION:假期第1天 / 共3天 1691 | END:VEVENT 1692 | 1693 | BEGIN:VEVENT 1694 | UID:20210613-0002-0003-0001-0000a95511fe 1695 | DTSTART;VALUE=DATE:20210613 1696 | SUMMARY:端午节假期 1697 | DESCRIPTION:假期第2天 / 共3天 1698 | END:VEVENT 1699 | 1700 | BEGIN:VEVENT 1701 | UID:20210614-0003-0003-0001-0000a95511fe 1702 | DTSTART;VALUE=DATE:20210614 1703 | SUMMARY:端午节假期 1704 | DESCRIPTION:假期第3天 / 共3天 1705 | END:VEVENT 1706 | 1707 | BEGIN:VEVENT 1708 | UID:20210919-0001-0003-0001-0000a95511fe 1709 | DTSTART;VALUE=DATE:20210919 1710 | SUMMARY:中秋节假期 1711 | DESCRIPTION:假期第1天 / 共3天 1712 | END:VEVENT 1713 | 1714 | BEGIN:VEVENT 1715 | UID:20210920-0002-0003-0001-0000a95511fe 1716 | DTSTART;VALUE=DATE:20210920 1717 | SUMMARY:中秋节假期 1718 | DESCRIPTION:假期第2天 / 共3天 1719 | END:VEVENT 1720 | 1721 | BEGIN:VEVENT 1722 | UID:20210921-0003-0003-0001-0000a95511fe 1723 | DTSTART;VALUE=DATE:20210921 1724 | SUMMARY:中秋节假期 1725 | DESCRIPTION:假期第3天 / 共3天 1726 | END:VEVENT 1727 | 1728 | BEGIN:VEVENT 1729 | UID:20211001-0001-0007-0001-0000a95511fe 1730 | DTSTART;VALUE=DATE:20211001 1731 | SUMMARY:国庆节假期 1732 | DESCRIPTION:假期第1天 / 共7天 1733 | END:VEVENT 1734 | 1735 | BEGIN:VEVENT 1736 | UID:20211002-0002-0007-0001-0000a95511fe 1737 | DTSTART;VALUE=DATE:20211002 1738 | SUMMARY:国庆节假期 1739 | DESCRIPTION:假期第2天 / 共7天 1740 | END:VEVENT 1741 | 1742 | BEGIN:VEVENT 1743 | UID:20211003-0003-0007-0001-0000a95511fe 1744 | DTSTART;VALUE=DATE:20211003 1745 | SUMMARY:国庆节假期 1746 | DESCRIPTION:假期第3天 / 共7天 1747 | END:VEVENT 1748 | 1749 | BEGIN:VEVENT 1750 | UID:20211004-0004-0007-0001-0000a95511fe 1751 | DTSTART;VALUE=DATE:20211004 1752 | SUMMARY:国庆节假期 1753 | DESCRIPTION:假期第4天 / 共7天 1754 | END:VEVENT 1755 | 1756 | BEGIN:VEVENT 1757 | UID:20211005-0005-0007-0001-0000a95511fe 1758 | DTSTART;VALUE=DATE:20211005 1759 | SUMMARY:国庆节假期 1760 | DESCRIPTION:假期第5天 / 共7天 1761 | END:VEVENT 1762 | 1763 | BEGIN:VEVENT 1764 | UID:20211006-0006-0007-0001-0000a95511fe 1765 | DTSTART;VALUE=DATE:20211006 1766 | SUMMARY:国庆节假期 1767 | DESCRIPTION:假期第6天 / 共7天 1768 | END:VEVENT 1769 | 1770 | BEGIN:VEVENT 1771 | UID:20211007-0007-0007-0001-0000a95511fe 1772 | DTSTART;VALUE=DATE:20211007 1773 | SUMMARY:国庆节假期 1774 | DESCRIPTION:假期第7天 / 共7天 1775 | END:VEVENT 1776 | 1777 | BEGIN:VEVENT 1778 | UID:20220101-0001-0003-0001-0000a95511fe 1779 | DTSTART;VALUE=DATE:20220101 1780 | SUMMARY:元旦假期 1781 | DESCRIPTION:假期第1天 / 共3天 1782 | END:VEVENT 1783 | 1784 | BEGIN:VEVENT 1785 | UID:20220102-0002-0003-0001-0000a95511fe 1786 | DTSTART;VALUE=DATE:20220102 1787 | SUMMARY:元旦假期 1788 | DESCRIPTION:假期第2天 / 共3天 1789 | END:VEVENT 1790 | 1791 | BEGIN:VEVENT 1792 | UID:20220103-0003-0003-0001-0000a95511fe 1793 | DTSTART;VALUE=DATE:20220103 1794 | SUMMARY:元旦假期 1795 | DESCRIPTION:假期第3天 / 共3天 1796 | END:VEVENT 1797 | 1798 | BEGIN:VEVENT 1799 | UID:20220131-0001-0007-0001-0000a95511fe 1800 | DTSTART;VALUE=DATE:20220131 1801 | SUMMARY:春节假期 1802 | DESCRIPTION:假期第1天 / 共7天 1803 | END:VEVENT 1804 | 1805 | BEGIN:VEVENT 1806 | UID:20220201-0002-0007-0001-0000a95511fe 1807 | DTSTART;VALUE=DATE:20220201 1808 | SUMMARY:春节假期 1809 | DESCRIPTION:假期第2天 / 共7天 1810 | END:VEVENT 1811 | 1812 | BEGIN:VEVENT 1813 | UID:20220202-0003-0007-0001-0000a95511fe 1814 | DTSTART;VALUE=DATE:20220202 1815 | SUMMARY:春节假期 1816 | DESCRIPTION:假期第3天 / 共7天 1817 | END:VEVENT 1818 | 1819 | BEGIN:VEVENT 1820 | UID:20220203-0004-0007-0001-0000a95511fe 1821 | DTSTART;VALUE=DATE:20220203 1822 | SUMMARY:春节假期 1823 | DESCRIPTION:假期第4天 / 共7天 1824 | END:VEVENT 1825 | 1826 | BEGIN:VEVENT 1827 | UID:20220204-0005-0007-0001-0000a95511fe 1828 | DTSTART;VALUE=DATE:20220204 1829 | SUMMARY:春节假期 1830 | DESCRIPTION:假期第5天 / 共7天 1831 | END:VEVENT 1832 | 1833 | BEGIN:VEVENT 1834 | UID:20220205-0006-0007-0001-0000a95511fe 1835 | DTSTART;VALUE=DATE:20220205 1836 | SUMMARY:春节假期 1837 | DESCRIPTION:假期第6天 / 共7天 1838 | END:VEVENT 1839 | 1840 | BEGIN:VEVENT 1841 | UID:20220206-0007-0007-0001-0000a95511fe 1842 | DTSTART;VALUE=DATE:20220206 1843 | SUMMARY:春节假期 1844 | DESCRIPTION:假期第7天 / 共7天 1845 | END:VEVENT 1846 | 1847 | BEGIN:VEVENT 1848 | UID:20220403-0001-0003-0001-0000a95511fe 1849 | DTSTART;VALUE=DATE:20220403 1850 | SUMMARY:清明节假期 1851 | DESCRIPTION:假期第1天 / 共3天 1852 | END:VEVENT 1853 | 1854 | BEGIN:VEVENT 1855 | UID:20220404-0002-0003-0001-0000a95511fe 1856 | DTSTART;VALUE=DATE:20220404 1857 | SUMMARY:清明节假期 1858 | DESCRIPTION:假期第2天 / 共3天 1859 | END:VEVENT 1860 | 1861 | BEGIN:VEVENT 1862 | UID:20220405-0003-0003-0001-0000a95511fe 1863 | DTSTART;VALUE=DATE:20220405 1864 | SUMMARY:清明节假期 1865 | DESCRIPTION:假期第3天 / 共3天 1866 | END:VEVENT 1867 | 1868 | BEGIN:VEVENT 1869 | UID:20220430-0001-0005-0001-0000a95511fe 1870 | DTSTART;VALUE=DATE:20220430 1871 | SUMMARY:劳动节假期 1872 | DESCRIPTION:假期第1天 / 共5天 1873 | END:VEVENT 1874 | 1875 | BEGIN:VEVENT 1876 | UID:20220501-0002-0005-0001-0000a95511fe 1877 | DTSTART;VALUE=DATE:20220501 1878 | SUMMARY:劳动节假期 1879 | DESCRIPTION:假期第2天 / 共5天 1880 | END:VEVENT 1881 | 1882 | BEGIN:VEVENT 1883 | UID:20220502-0003-0005-0001-0000a95511fe 1884 | DTSTART;VALUE=DATE:20220502 1885 | SUMMARY:劳动节假期 1886 | DESCRIPTION:假期第3天 / 共5天 1887 | END:VEVENT 1888 | 1889 | BEGIN:VEVENT 1890 | UID:20220503-0004-0005-0001-0000a95511fe 1891 | DTSTART;VALUE=DATE:20220503 1892 | SUMMARY:劳动节假期 1893 | DESCRIPTION:假期第4天 / 共5天 1894 | END:VEVENT 1895 | 1896 | BEGIN:VEVENT 1897 | UID:20220504-0005-0005-0001-0000a95511fe 1898 | DTSTART;VALUE=DATE:20220504 1899 | SUMMARY:劳动节假期 1900 | DESCRIPTION:假期第5天 / 共5天 1901 | END:VEVENT 1902 | 1903 | BEGIN:VEVENT 1904 | UID:20220603-0001-0003-0001-0000a95511fe 1905 | DTSTART;VALUE=DATE:20220603 1906 | SUMMARY:端午节假期 1907 | DESCRIPTION:假期第1天 / 共3天 1908 | END:VEVENT 1909 | 1910 | BEGIN:VEVENT 1911 | UID:20220604-0002-0003-0001-0000a95511fe 1912 | DTSTART;VALUE=DATE:20220604 1913 | SUMMARY:端午节假期 1914 | DESCRIPTION:假期第2天 / 共3天 1915 | END:VEVENT 1916 | 1917 | BEGIN:VEVENT 1918 | UID:20220605-0003-0003-0001-0000a95511fe 1919 | DTSTART;VALUE=DATE:20220605 1920 | SUMMARY:端午节假期 1921 | DESCRIPTION:假期第3天 / 共3天 1922 | END:VEVENT 1923 | 1924 | BEGIN:VEVENT 1925 | UID:20220910-0001-0003-0001-0000a95511fe 1926 | DTSTART;VALUE=DATE:20220910 1927 | SUMMARY:中秋节假期 1928 | DESCRIPTION:假期第1天 / 共3天 1929 | END:VEVENT 1930 | 1931 | BEGIN:VEVENT 1932 | UID:20220911-0002-0003-0001-0000a95511fe 1933 | DTSTART;VALUE=DATE:20220911 1934 | SUMMARY:中秋节假期 1935 | DESCRIPTION:假期第2天 / 共3天 1936 | END:VEVENT 1937 | 1938 | BEGIN:VEVENT 1939 | UID:20220912-0003-0003-0001-0000a95511fe 1940 | DTSTART;VALUE=DATE:20220912 1941 | SUMMARY:中秋节假期 1942 | DESCRIPTION:假期第3天 / 共3天 1943 | END:VEVENT 1944 | 1945 | BEGIN:VEVENT 1946 | UID:20221001-0001-0007-0001-0000a95511fe 1947 | DTSTART;VALUE=DATE:20221001 1948 | SUMMARY:国庆节假期 1949 | DESCRIPTION:假期第1天 / 共7天 1950 | END:VEVENT 1951 | 1952 | BEGIN:VEVENT 1953 | UID:20221002-0002-0007-0001-0000a95511fe 1954 | DTSTART;VALUE=DATE:20221002 1955 | SUMMARY:国庆节假期 1956 | DESCRIPTION:假期第2天 / 共7天 1957 | END:VEVENT 1958 | 1959 | BEGIN:VEVENT 1960 | UID:20221003-0003-0007-0001-0000a95511fe 1961 | DTSTART;VALUE=DATE:20221003 1962 | SUMMARY:国庆节假期 1963 | DESCRIPTION:假期第3天 / 共7天 1964 | END:VEVENT 1965 | 1966 | BEGIN:VEVENT 1967 | UID:20221004-0004-0007-0001-0000a95511fe 1968 | DTSTART;VALUE=DATE:20221004 1969 | SUMMARY:国庆节假期 1970 | DESCRIPTION:假期第4天 / 共7天 1971 | END:VEVENT 1972 | 1973 | BEGIN:VEVENT 1974 | UID:20221005-0005-0007-0001-0000a95511fe 1975 | DTSTART;VALUE=DATE:20221005 1976 | SUMMARY:国庆节假期 1977 | DESCRIPTION:假期第5天 / 共7天 1978 | END:VEVENT 1979 | 1980 | BEGIN:VEVENT 1981 | UID:20221006-0006-0007-0001-0000a95511fe 1982 | DTSTART;VALUE=DATE:20221006 1983 | SUMMARY:国庆节假期 1984 | DESCRIPTION:假期第6天 / 共7天 1985 | END:VEVENT 1986 | 1987 | BEGIN:VEVENT 1988 | UID:20221007-0007-0007-0001-0000a95511fe 1989 | DTSTART;VALUE=DATE:20221007 1990 | SUMMARY:国庆节假期 1991 | DESCRIPTION:假期第7天 / 共7天 1992 | END:VEVENT 1993 | 1994 | BEGIN:VEVENT 1995 | UID:20221231-0001-0003-0001-0000a95511fe 1996 | DTSTART;VALUE=DATE:20221231 1997 | SUMMARY:元旦假期 1998 | DESCRIPTION:假期第1天 / 共3天 1999 | END:VEVENT 2000 | 2001 | BEGIN:VEVENT 2002 | UID:20230101-0002-0003-0001-0000a95511fe 2003 | DTSTART;VALUE=DATE:20230101 2004 | SUMMARY:元旦假期 2005 | DESCRIPTION:假期第2天 / 共3天 2006 | END:VEVENT 2007 | 2008 | BEGIN:VEVENT 2009 | UID:20230102-0003-0003-0001-0000a95511fe 2010 | DTSTART;VALUE=DATE:20230102 2011 | SUMMARY:元旦假期 2012 | DESCRIPTION:假期第3天 / 共3天 2013 | END:VEVENT 2014 | 2015 | BEGIN:VEVENT 2016 | UID:20230121-0001-0007-0001-0000a95511fe 2017 | DTSTART;VALUE=DATE:20230121 2018 | SUMMARY:春节假期 2019 | DESCRIPTION:假期第1天 / 共7天 2020 | END:VEVENT 2021 | 2022 | BEGIN:VEVENT 2023 | UID:20230122-0002-0007-0001-0000a95511fe 2024 | DTSTART;VALUE=DATE:20230122 2025 | SUMMARY:春节假期 2026 | DESCRIPTION:假期第2天 / 共7天 2027 | END:VEVENT 2028 | 2029 | BEGIN:VEVENT 2030 | UID:20230123-0003-0007-0001-0000a95511fe 2031 | DTSTART;VALUE=DATE:20230123 2032 | SUMMARY:春节假期 2033 | DESCRIPTION:假期第3天 / 共7天 2034 | END:VEVENT 2035 | 2036 | BEGIN:VEVENT 2037 | UID:20230124-0004-0007-0001-0000a95511fe 2038 | DTSTART;VALUE=DATE:20230124 2039 | SUMMARY:春节假期 2040 | DESCRIPTION:假期第4天 / 共7天 2041 | END:VEVENT 2042 | 2043 | BEGIN:VEVENT 2044 | UID:20230125-0005-0007-0001-0000a95511fe 2045 | DTSTART;VALUE=DATE:20230125 2046 | SUMMARY:春节假期 2047 | DESCRIPTION:假期第5天 / 共7天 2048 | END:VEVENT 2049 | 2050 | BEGIN:VEVENT 2051 | UID:20230126-0006-0007-0001-0000a95511fe 2052 | DTSTART;VALUE=DATE:20230126 2053 | SUMMARY:春节假期 2054 | DESCRIPTION:假期第6天 / 共7天 2055 | END:VEVENT 2056 | 2057 | BEGIN:VEVENT 2058 | UID:20230127-0007-0007-0001-0000a95511fe 2059 | DTSTART;VALUE=DATE:20230127 2060 | SUMMARY:春节假期 2061 | DESCRIPTION:假期第7天 / 共7天 2062 | END:VEVENT 2063 | 2064 | BEGIN:VEVENT 2065 | UID:20230405-0001-0001-0001-0000a95511fe 2066 | DTSTART;VALUE=DATE:20230405 2067 | SUMMARY:清明节假期 2068 | DESCRIPTION:假期第1天 / 共1天 2069 | END:VEVENT 2070 | 2071 | BEGIN:VEVENT 2072 | UID:20230429-0001-0005-0001-0000a95511fe 2073 | DTSTART;VALUE=DATE:20230429 2074 | SUMMARY:劳动节假期 2075 | DESCRIPTION:假期第1天 / 共5天 2076 | END:VEVENT 2077 | 2078 | BEGIN:VEVENT 2079 | UID:20230430-0002-0005-0001-0000a95511fe 2080 | DTSTART;VALUE=DATE:20230430 2081 | SUMMARY:劳动节假期 2082 | DESCRIPTION:假期第2天 / 共5天 2083 | END:VEVENT 2084 | 2085 | BEGIN:VEVENT 2086 | UID:20230501-0003-0005-0001-0000a95511fe 2087 | DTSTART;VALUE=DATE:20230501 2088 | SUMMARY:劳动节假期 2089 | DESCRIPTION:假期第3天 / 共5天 2090 | END:VEVENT 2091 | 2092 | BEGIN:VEVENT 2093 | UID:20230502-0004-0005-0001-0000a95511fe 2094 | DTSTART;VALUE=DATE:20230502 2095 | SUMMARY:劳动节假期 2096 | DESCRIPTION:假期第4天 / 共5天 2097 | END:VEVENT 2098 | 2099 | BEGIN:VEVENT 2100 | UID:20230503-0005-0005-0001-0000a95511fe 2101 | DTSTART;VALUE=DATE:20230503 2102 | SUMMARY:劳动节假期 2103 | DESCRIPTION:假期第5天 / 共5天 2104 | END:VEVENT 2105 | 2106 | BEGIN:VEVENT 2107 | UID:20230622-0001-0003-0001-0000a95511fe 2108 | DTSTART;VALUE=DATE:20230622 2109 | SUMMARY:端午节假期 2110 | DESCRIPTION:假期第1天 / 共3天 2111 | END:VEVENT 2112 | 2113 | BEGIN:VEVENT 2114 | UID:20230623-0002-0003-0001-0000a95511fe 2115 | DTSTART;VALUE=DATE:20230623 2116 | SUMMARY:端午节假期 2117 | DESCRIPTION:假期第2天 / 共3天 2118 | END:VEVENT 2119 | 2120 | BEGIN:VEVENT 2121 | UID:20230624-0003-0003-0001-0000a95511fe 2122 | DTSTART;VALUE=DATE:20230624 2123 | SUMMARY:端午节假期 2124 | DESCRIPTION:假期第3天 / 共3天 2125 | END:VEVENT 2126 | 2127 | BEGIN:VEVENT 2128 | UID:20230929-0001-0008-0001-0000a95511fe 2129 | DTSTART;VALUE=DATE:20230929 2130 | SUMMARY:中秋节、国庆节假期 2131 | DESCRIPTION:假期第1天 / 共8天 2132 | END:VEVENT 2133 | 2134 | BEGIN:VEVENT 2135 | UID:20230930-0002-0008-0001-0000a95511fe 2136 | DTSTART;VALUE=DATE:20230930 2137 | SUMMARY:中秋节、国庆节假期 2138 | DESCRIPTION:假期第2天 / 共8天 2139 | END:VEVENT 2140 | 2141 | BEGIN:VEVENT 2142 | UID:20231001-0003-0008-0001-0000a95511fe 2143 | DTSTART;VALUE=DATE:20231001 2144 | SUMMARY:中秋节、国庆节假期 2145 | DESCRIPTION:假期第3天 / 共8天 2146 | END:VEVENT 2147 | 2148 | BEGIN:VEVENT 2149 | UID:20231002-0004-0008-0001-0000a95511fe 2150 | DTSTART;VALUE=DATE:20231002 2151 | SUMMARY:中秋节、国庆节假期 2152 | DESCRIPTION:假期第4天 / 共8天 2153 | END:VEVENT 2154 | 2155 | BEGIN:VEVENT 2156 | UID:20231003-0005-0008-0001-0000a95511fe 2157 | DTSTART;VALUE=DATE:20231003 2158 | SUMMARY:中秋节、国庆节假期 2159 | DESCRIPTION:假期第5天 / 共8天 2160 | END:VEVENT 2161 | 2162 | BEGIN:VEVENT 2163 | UID:20231004-0006-0008-0001-0000a95511fe 2164 | DTSTART;VALUE=DATE:20231004 2165 | SUMMARY:中秋节、国庆节假期 2166 | DESCRIPTION:假期第6天 / 共8天 2167 | END:VEVENT 2168 | 2169 | BEGIN:VEVENT 2170 | UID:20231005-0007-0008-0001-0000a95511fe 2171 | DTSTART;VALUE=DATE:20231005 2172 | SUMMARY:中秋节、国庆节假期 2173 | DESCRIPTION:假期第7天 / 共8天 2174 | END:VEVENT 2175 | 2176 | BEGIN:VEVENT 2177 | UID:20231006-0008-0008-0001-0000a95511fe 2178 | DTSTART;VALUE=DATE:20231006 2179 | SUMMARY:中秋节、国庆节假期 2180 | DESCRIPTION:假期第8天 / 共8天 2181 | END:VEVENT 2182 | 2183 | BEGIN:VEVENT 2184 | UID:20231230-0001-0003-0001-0000a95511fe 2185 | DTSTART;VALUE=DATE:20231230 2186 | SUMMARY:元旦假期 2187 | DESCRIPTION:假期第1天 / 共3天 2188 | END:VEVENT 2189 | 2190 | BEGIN:VEVENT 2191 | UID:20231231-0002-0003-0001-0000a95511fe 2192 | DTSTART;VALUE=DATE:20231231 2193 | SUMMARY:元旦假期 2194 | DESCRIPTION:假期第2天 / 共3天 2195 | END:VEVENT 2196 | 2197 | BEGIN:VEVENT 2198 | UID:20240101-0003-0003-0001-0000a95511fe 2199 | DTSTART;VALUE=DATE:20240101 2200 | SUMMARY:元旦假期 2201 | DESCRIPTION:假期第3天 / 共3天 2202 | END:VEVENT 2203 | 2204 | BEGIN:VEVENT 2205 | UID:20240210-0001-0008-0001-0000a95511fe 2206 | DTSTART;VALUE=DATE:20240210 2207 | SUMMARY:春节假期 2208 | DESCRIPTION:假期第1天 / 共8天 2209 | END:VEVENT 2210 | 2211 | BEGIN:VEVENT 2212 | UID:20240211-0002-0008-0001-0000a95511fe 2213 | DTSTART;VALUE=DATE:20240211 2214 | SUMMARY:春节假期 2215 | DESCRIPTION:假期第2天 / 共8天 2216 | END:VEVENT 2217 | 2218 | BEGIN:VEVENT 2219 | UID:20240212-0003-0008-0001-0000a95511fe 2220 | DTSTART;VALUE=DATE:20240212 2221 | SUMMARY:春节假期 2222 | DESCRIPTION:假期第3天 / 共8天 2223 | END:VEVENT 2224 | 2225 | BEGIN:VEVENT 2226 | UID:20240213-0004-0008-0001-0000a95511fe 2227 | DTSTART;VALUE=DATE:20240213 2228 | SUMMARY:春节假期 2229 | DESCRIPTION:假期第4天 / 共8天 2230 | END:VEVENT 2231 | 2232 | BEGIN:VEVENT 2233 | UID:20240214-0005-0008-0001-0000a95511fe 2234 | DTSTART;VALUE=DATE:20240214 2235 | SUMMARY:春节假期 2236 | DESCRIPTION:假期第5天 / 共8天 2237 | END:VEVENT 2238 | 2239 | BEGIN:VEVENT 2240 | UID:20240215-0006-0008-0001-0000a95511fe 2241 | DTSTART;VALUE=DATE:20240215 2242 | SUMMARY:春节假期 2243 | DESCRIPTION:假期第6天 / 共8天 2244 | END:VEVENT 2245 | 2246 | BEGIN:VEVENT 2247 | UID:20240216-0007-0008-0001-0000a95511fe 2248 | DTSTART;VALUE=DATE:20240216 2249 | SUMMARY:春节假期 2250 | DESCRIPTION:假期第7天 / 共8天 2251 | END:VEVENT 2252 | 2253 | BEGIN:VEVENT 2254 | UID:20240217-0008-0008-0001-0000a95511fe 2255 | DTSTART;VALUE=DATE:20240217 2256 | SUMMARY:春节假期 2257 | DESCRIPTION:假期第8天 / 共8天 2258 | END:VEVENT 2259 | 2260 | BEGIN:VEVENT 2261 | UID:20240404-0001-0003-0001-0000a95511fe 2262 | DTSTART;VALUE=DATE:20240404 2263 | SUMMARY:清明节假期 2264 | DESCRIPTION:假期第1天 / 共3天 2265 | END:VEVENT 2266 | 2267 | BEGIN:VEVENT 2268 | UID:20240405-0002-0003-0001-0000a95511fe 2269 | DTSTART;VALUE=DATE:20240405 2270 | SUMMARY:清明节假期 2271 | DESCRIPTION:假期第2天 / 共3天 2272 | END:VEVENT 2273 | 2274 | BEGIN:VEVENT 2275 | UID:20240406-0003-0003-0001-0000a95511fe 2276 | DTSTART;VALUE=DATE:20240406 2277 | SUMMARY:清明节假期 2278 | DESCRIPTION:假期第3天 / 共3天 2279 | END:VEVENT 2280 | 2281 | BEGIN:VEVENT 2282 | UID:20240501-0001-0005-0001-0000a95511fe 2283 | DTSTART;VALUE=DATE:20240501 2284 | SUMMARY:劳动节假期 2285 | DESCRIPTION:假期第1天 / 共5天 2286 | END:VEVENT 2287 | 2288 | BEGIN:VEVENT 2289 | UID:20240502-0002-0005-0001-0000a95511fe 2290 | DTSTART;VALUE=DATE:20240502 2291 | SUMMARY:劳动节假期 2292 | DESCRIPTION:假期第2天 / 共5天 2293 | END:VEVENT 2294 | 2295 | BEGIN:VEVENT 2296 | UID:20240503-0003-0005-0001-0000a95511fe 2297 | DTSTART;VALUE=DATE:20240503 2298 | SUMMARY:劳动节假期 2299 | DESCRIPTION:假期第3天 / 共5天 2300 | END:VEVENT 2301 | 2302 | BEGIN:VEVENT 2303 | UID:20240504-0004-0005-0001-0000a95511fe 2304 | DTSTART;VALUE=DATE:20240504 2305 | SUMMARY:劳动节假期 2306 | DESCRIPTION:假期第4天 / 共5天 2307 | END:VEVENT 2308 | 2309 | BEGIN:VEVENT 2310 | UID:20240505-0005-0005-0001-0000a95511fe 2311 | DTSTART;VALUE=DATE:20240505 2312 | SUMMARY:劳动节假期 2313 | DESCRIPTION:假期第5天 / 共5天 2314 | END:VEVENT 2315 | 2316 | BEGIN:VEVENT 2317 | UID:20240608-0001-0003-0001-0000a95511fe 2318 | DTSTART;VALUE=DATE:20240608 2319 | SUMMARY:端午节假期 2320 | DESCRIPTION:假期第1天 / 共3天 2321 | END:VEVENT 2322 | 2323 | BEGIN:VEVENT 2324 | UID:20240609-0002-0003-0001-0000a95511fe 2325 | DTSTART;VALUE=DATE:20240609 2326 | SUMMARY:端午节假期 2327 | DESCRIPTION:假期第2天 / 共3天 2328 | END:VEVENT 2329 | 2330 | BEGIN:VEVENT 2331 | UID:20240610-0003-0003-0001-0000a95511fe 2332 | DTSTART;VALUE=DATE:20240610 2333 | SUMMARY:端午节假期 2334 | DESCRIPTION:假期第3天 / 共3天 2335 | END:VEVENT 2336 | 2337 | BEGIN:VEVENT 2338 | UID:20240915-0001-0003-0001-0000a95511fe 2339 | DTSTART;VALUE=DATE:20240915 2340 | SUMMARY:中秋节假期 2341 | DESCRIPTION:假期第1天 / 共3天 2342 | END:VEVENT 2343 | 2344 | BEGIN:VEVENT 2345 | UID:20240916-0002-0003-0001-0000a95511fe 2346 | DTSTART;VALUE=DATE:20240916 2347 | SUMMARY:中秋节假期 2348 | DESCRIPTION:假期第2天 / 共3天 2349 | END:VEVENT 2350 | 2351 | BEGIN:VEVENT 2352 | UID:20240917-0003-0003-0001-0000a95511fe 2353 | DTSTART;VALUE=DATE:20240917 2354 | SUMMARY:中秋节假期 2355 | DESCRIPTION:假期第3天 / 共3天 2356 | END:VEVENT 2357 | 2358 | BEGIN:VEVENT 2359 | UID:20241001-0001-0007-0001-0000a95511fe 2360 | DTSTART;VALUE=DATE:20241001 2361 | SUMMARY:国庆节假期 2362 | DESCRIPTION:假期第1天 / 共7天 2363 | END:VEVENT 2364 | 2365 | BEGIN:VEVENT 2366 | UID:20241002-0002-0007-0001-0000a95511fe 2367 | DTSTART;VALUE=DATE:20241002 2368 | SUMMARY:国庆节假期 2369 | DESCRIPTION:假期第2天 / 共7天 2370 | END:VEVENT 2371 | 2372 | BEGIN:VEVENT 2373 | UID:20241003-0003-0007-0001-0000a95511fe 2374 | DTSTART;VALUE=DATE:20241003 2375 | SUMMARY:国庆节假期 2376 | DESCRIPTION:假期第3天 / 共7天 2377 | END:VEVENT 2378 | 2379 | BEGIN:VEVENT 2380 | UID:20241004-0004-0007-0001-0000a95511fe 2381 | DTSTART;VALUE=DATE:20241004 2382 | SUMMARY:国庆节假期 2383 | DESCRIPTION:假期第4天 / 共7天 2384 | END:VEVENT 2385 | 2386 | BEGIN:VEVENT 2387 | UID:20241005-0005-0007-0001-0000a95511fe 2388 | DTSTART;VALUE=DATE:20241005 2389 | SUMMARY:国庆节假期 2390 | DESCRIPTION:假期第5天 / 共7天 2391 | END:VEVENT 2392 | 2393 | BEGIN:VEVENT 2394 | UID:20241006-0006-0007-0001-0000a95511fe 2395 | DTSTART;VALUE=DATE:20241006 2396 | SUMMARY:国庆节假期 2397 | DESCRIPTION:假期第6天 / 共7天 2398 | END:VEVENT 2399 | 2400 | BEGIN:VEVENT 2401 | UID:20241007-0007-0007-0001-0000a95511fe 2402 | DTSTART;VALUE=DATE:20241007 2403 | SUMMARY:国庆节假期 2404 | DESCRIPTION:假期第7天 / 共7天 2405 | END:VEVENT 2406 | 2407 | BEGIN:VEVENT 2408 | UID:20250101-0001-0001-0001-0000a95511fe 2409 | DTSTART;VALUE=DATE:20250101 2410 | SUMMARY:元旦假期 2411 | DESCRIPTION:假期第1天 / 共1天 2412 | END:VEVENT 2413 | 2414 | BEGIN:VEVENT 2415 | UID:20250128-0001-0008-0001-0000a95511fe 2416 | DTSTART;VALUE=DATE:20250128 2417 | SUMMARY:春节假期 2418 | DESCRIPTION:假期第1天 / 共8天 2419 | END:VEVENT 2420 | 2421 | BEGIN:VEVENT 2422 | UID:20250129-0002-0008-0001-0000a95511fe 2423 | DTSTART;VALUE=DATE:20250129 2424 | SUMMARY:春节假期 2425 | DESCRIPTION:假期第2天 / 共8天 2426 | END:VEVENT 2427 | 2428 | BEGIN:VEVENT 2429 | UID:20250130-0003-0008-0001-0000a95511fe 2430 | DTSTART;VALUE=DATE:20250130 2431 | SUMMARY:春节假期 2432 | DESCRIPTION:假期第3天 / 共8天 2433 | END:VEVENT 2434 | 2435 | BEGIN:VEVENT 2436 | UID:20250131-0004-0008-0001-0000a95511fe 2437 | DTSTART;VALUE=DATE:20250131 2438 | SUMMARY:春节假期 2439 | DESCRIPTION:假期第4天 / 共8天 2440 | END:VEVENT 2441 | 2442 | BEGIN:VEVENT 2443 | UID:20250201-0005-0008-0001-0000a95511fe 2444 | DTSTART;VALUE=DATE:20250201 2445 | SUMMARY:春节假期 2446 | DESCRIPTION:假期第5天 / 共8天 2447 | END:VEVENT 2448 | 2449 | BEGIN:VEVENT 2450 | UID:20250202-0006-0008-0001-0000a95511fe 2451 | DTSTART;VALUE=DATE:20250202 2452 | SUMMARY:春节假期 2453 | DESCRIPTION:假期第6天 / 共8天 2454 | END:VEVENT 2455 | 2456 | BEGIN:VEVENT 2457 | UID:20250203-0007-0008-0001-0000a95511fe 2458 | DTSTART;VALUE=DATE:20250203 2459 | SUMMARY:春节假期 2460 | DESCRIPTION:假期第7天 / 共8天 2461 | END:VEVENT 2462 | 2463 | BEGIN:VEVENT 2464 | UID:20250204-0008-0008-0001-0000a95511fe 2465 | DTSTART;VALUE=DATE:20250204 2466 | SUMMARY:春节假期 2467 | DESCRIPTION:假期第8天 / 共8天 2468 | END:VEVENT 2469 | 2470 | BEGIN:VEVENT 2471 | UID:20250404-0001-0003-0001-0000a95511fe 2472 | DTSTART;VALUE=DATE:20250404 2473 | SUMMARY:清明节假期 2474 | DESCRIPTION:假期第1天 / 共3天 2475 | END:VEVENT 2476 | 2477 | BEGIN:VEVENT 2478 | UID:20250405-0002-0003-0001-0000a95511fe 2479 | DTSTART;VALUE=DATE:20250405 2480 | SUMMARY:清明节假期 2481 | DESCRIPTION:假期第2天 / 共3天 2482 | END:VEVENT 2483 | 2484 | BEGIN:VEVENT 2485 | UID:20250406-0003-0003-0001-0000a95511fe 2486 | DTSTART;VALUE=DATE:20250406 2487 | SUMMARY:清明节假期 2488 | DESCRIPTION:假期第3天 / 共3天 2489 | END:VEVENT 2490 | 2491 | BEGIN:VEVENT 2492 | UID:20250501-0001-0005-0001-0000a95511fe 2493 | DTSTART;VALUE=DATE:20250501 2494 | SUMMARY:劳动节假期 2495 | DESCRIPTION:假期第1天 / 共5天 2496 | END:VEVENT 2497 | 2498 | BEGIN:VEVENT 2499 | UID:20250502-0002-0005-0001-0000a95511fe 2500 | DTSTART;VALUE=DATE:20250502 2501 | SUMMARY:劳动节假期 2502 | DESCRIPTION:假期第2天 / 共5天 2503 | END:VEVENT 2504 | 2505 | BEGIN:VEVENT 2506 | UID:20250503-0003-0005-0001-0000a95511fe 2507 | DTSTART;VALUE=DATE:20250503 2508 | SUMMARY:劳动节假期 2509 | DESCRIPTION:假期第3天 / 共5天 2510 | END:VEVENT 2511 | 2512 | BEGIN:VEVENT 2513 | UID:20250504-0004-0005-0001-0000a95511fe 2514 | DTSTART;VALUE=DATE:20250504 2515 | SUMMARY:劳动节假期 2516 | DESCRIPTION:假期第4天 / 共5天 2517 | END:VEVENT 2518 | 2519 | BEGIN:VEVENT 2520 | UID:20250505-0005-0005-0001-0000a95511fe 2521 | DTSTART;VALUE=DATE:20250505 2522 | SUMMARY:劳动节假期 2523 | DESCRIPTION:假期第5天 / 共5天 2524 | END:VEVENT 2525 | 2526 | BEGIN:VEVENT 2527 | UID:20250531-0001-0003-0001-0000a95511fe 2528 | DTSTART;VALUE=DATE:20250531 2529 | SUMMARY:端午节假期 2530 | DESCRIPTION:假期第1天 / 共3天 2531 | END:VEVENT 2532 | 2533 | BEGIN:VEVENT 2534 | UID:20250601-0002-0003-0001-0000a95511fe 2535 | DTSTART;VALUE=DATE:20250601 2536 | SUMMARY:端午节假期 2537 | DESCRIPTION:假期第2天 / 共3天 2538 | END:VEVENT 2539 | 2540 | BEGIN:VEVENT 2541 | UID:20250602-0003-0003-0001-0000a95511fe 2542 | DTSTART;VALUE=DATE:20250602 2543 | SUMMARY:端午节假期 2544 | DESCRIPTION:假期第3天 / 共3天 2545 | END:VEVENT 2546 | 2547 | BEGIN:VEVENT 2548 | UID:20251001-0001-0008-0001-0000a95511fe 2549 | DTSTART;VALUE=DATE:20251001 2550 | SUMMARY:国庆节、中秋节假期 2551 | DESCRIPTION:假期第1天 / 共8天 2552 | END:VEVENT 2553 | 2554 | BEGIN:VEVENT 2555 | UID:20251002-0002-0008-0001-0000a95511fe 2556 | DTSTART;VALUE=DATE:20251002 2557 | SUMMARY:国庆节、中秋节假期 2558 | DESCRIPTION:假期第2天 / 共8天 2559 | END:VEVENT 2560 | 2561 | BEGIN:VEVENT 2562 | UID:20251003-0003-0008-0001-0000a95511fe 2563 | DTSTART;VALUE=DATE:20251003 2564 | SUMMARY:国庆节、中秋节假期 2565 | DESCRIPTION:假期第3天 / 共8天 2566 | END:VEVENT 2567 | 2568 | BEGIN:VEVENT 2569 | UID:20251004-0004-0008-0001-0000a95511fe 2570 | DTSTART;VALUE=DATE:20251004 2571 | SUMMARY:国庆节、中秋节假期 2572 | DESCRIPTION:假期第4天 / 共8天 2573 | END:VEVENT 2574 | 2575 | BEGIN:VEVENT 2576 | UID:20251005-0005-0008-0001-0000a95511fe 2577 | DTSTART;VALUE=DATE:20251005 2578 | SUMMARY:国庆节、中秋节假期 2579 | DESCRIPTION:假期第5天 / 共8天 2580 | END:VEVENT 2581 | 2582 | BEGIN:VEVENT 2583 | UID:20251006-0006-0008-0001-0000a95511fe 2584 | DTSTART;VALUE=DATE:20251006 2585 | SUMMARY:国庆节、中秋节假期 2586 | DESCRIPTION:假期第6天 / 共8天 2587 | END:VEVENT 2588 | 2589 | BEGIN:VEVENT 2590 | UID:20251007-0007-0008-0001-0000a95511fe 2591 | DTSTART;VALUE=DATE:20251007 2592 | SUMMARY:国庆节、中秋节假期 2593 | DESCRIPTION:假期第7天 / 共8天 2594 | END:VEVENT 2595 | 2596 | BEGIN:VEVENT 2597 | UID:20251008-0008-0008-0001-0000a95511fe 2598 | DTSTART;VALUE=DATE:20251008 2599 | SUMMARY:国庆节、中秋节假期 2600 | DESCRIPTION:假期第8天 / 共8天 2601 | END:VEVENT 2602 | 2603 | BEGIN:VEVENT 2604 | UID:20260101-0001-0003-0001-0000a95511fe 2605 | DTSTART;VALUE=DATE:20260101 2606 | SUMMARY:元旦假期 2607 | DESCRIPTION:假期第1天 / 共3天 2608 | END:VEVENT 2609 | 2610 | BEGIN:VEVENT 2611 | UID:20260102-0002-0003-0001-0000a95511fe 2612 | DTSTART;VALUE=DATE:20260102 2613 | SUMMARY:元旦假期 2614 | DESCRIPTION:假期第2天 / 共3天 2615 | END:VEVENT 2616 | 2617 | BEGIN:VEVENT 2618 | UID:20260103-0003-0003-0001-0000a95511fe 2619 | DTSTART;VALUE=DATE:20260103 2620 | SUMMARY:元旦假期 2621 | DESCRIPTION:假期第3天 / 共3天 2622 | END:VEVENT 2623 | 2624 | BEGIN:VEVENT 2625 | UID:20260215-0001-0009-0001-0000a95511fe 2626 | DTSTART;VALUE=DATE:20260215 2627 | SUMMARY:春节假期 2628 | DESCRIPTION:假期第1天 / 共9天 2629 | END:VEVENT 2630 | 2631 | BEGIN:VEVENT 2632 | UID:20260216-0002-0009-0001-0000a95511fe 2633 | DTSTART;VALUE=DATE:20260216 2634 | SUMMARY:春节假期 2635 | DESCRIPTION:假期第2天 / 共9天 2636 | END:VEVENT 2637 | 2638 | BEGIN:VEVENT 2639 | UID:20260217-0003-0009-0001-0000a95511fe 2640 | DTSTART;VALUE=DATE:20260217 2641 | SUMMARY:春节假期 2642 | DESCRIPTION:假期第3天 / 共9天 2643 | END:VEVENT 2644 | 2645 | BEGIN:VEVENT 2646 | UID:20260218-0004-0009-0001-0000a95511fe 2647 | DTSTART;VALUE=DATE:20260218 2648 | SUMMARY:春节假期 2649 | DESCRIPTION:假期第4天 / 共9天 2650 | END:VEVENT 2651 | 2652 | BEGIN:VEVENT 2653 | UID:20260219-0005-0009-0001-0000a95511fe 2654 | DTSTART;VALUE=DATE:20260219 2655 | SUMMARY:春节假期 2656 | DESCRIPTION:假期第5天 / 共9天 2657 | END:VEVENT 2658 | 2659 | BEGIN:VEVENT 2660 | UID:20260220-0006-0009-0001-0000a95511fe 2661 | DTSTART;VALUE=DATE:20260220 2662 | SUMMARY:春节假期 2663 | DESCRIPTION:假期第6天 / 共9天 2664 | END:VEVENT 2665 | 2666 | BEGIN:VEVENT 2667 | UID:20260221-0007-0009-0001-0000a95511fe 2668 | DTSTART;VALUE=DATE:20260221 2669 | SUMMARY:春节假期 2670 | DESCRIPTION:假期第7天 / 共9天 2671 | END:VEVENT 2672 | 2673 | BEGIN:VEVENT 2674 | UID:20260222-0008-0009-0001-0000a95511fe 2675 | DTSTART;VALUE=DATE:20260222 2676 | SUMMARY:春节假期 2677 | DESCRIPTION:假期第8天 / 共9天 2678 | END:VEVENT 2679 | 2680 | BEGIN:VEVENT 2681 | UID:20260223-0009-0009-0001-0000a95511fe 2682 | DTSTART;VALUE=DATE:20260223 2683 | SUMMARY:春节假期 2684 | DESCRIPTION:假期第9天 / 共9天 2685 | END:VEVENT 2686 | 2687 | BEGIN:VEVENT 2688 | UID:20260404-0001-0003-0001-0000a95511fe 2689 | DTSTART;VALUE=DATE:20260404 2690 | SUMMARY:清明节假期 2691 | DESCRIPTION:假期第1天 / 共3天 2692 | END:VEVENT 2693 | 2694 | BEGIN:VEVENT 2695 | UID:20260405-0002-0003-0001-0000a95511fe 2696 | DTSTART;VALUE=DATE:20260405 2697 | SUMMARY:清明节假期 2698 | DESCRIPTION:假期第2天 / 共3天 2699 | END:VEVENT 2700 | 2701 | BEGIN:VEVENT 2702 | UID:20260406-0003-0003-0001-0000a95511fe 2703 | DTSTART;VALUE=DATE:20260406 2704 | SUMMARY:清明节假期 2705 | DESCRIPTION:假期第3天 / 共3天 2706 | END:VEVENT 2707 | 2708 | BEGIN:VEVENT 2709 | UID:20260501-0001-0005-0001-0000a95511fe 2710 | DTSTART;VALUE=DATE:20260501 2711 | SUMMARY:劳动节假期 2712 | DESCRIPTION:假期第1天 / 共5天 2713 | END:VEVENT 2714 | 2715 | BEGIN:VEVENT 2716 | UID:20260502-0002-0005-0001-0000a95511fe 2717 | DTSTART;VALUE=DATE:20260502 2718 | SUMMARY:劳动节假期 2719 | DESCRIPTION:假期第2天 / 共5天 2720 | END:VEVENT 2721 | 2722 | BEGIN:VEVENT 2723 | UID:20260503-0003-0005-0001-0000a95511fe 2724 | DTSTART;VALUE=DATE:20260503 2725 | SUMMARY:劳动节假期 2726 | DESCRIPTION:假期第3天 / 共5天 2727 | END:VEVENT 2728 | 2729 | BEGIN:VEVENT 2730 | UID:20260504-0004-0005-0001-0000a95511fe 2731 | DTSTART;VALUE=DATE:20260504 2732 | SUMMARY:劳动节假期 2733 | DESCRIPTION:假期第4天 / 共5天 2734 | END:VEVENT 2735 | 2736 | BEGIN:VEVENT 2737 | UID:20260505-0005-0005-0001-0000a95511fe 2738 | DTSTART;VALUE=DATE:20260505 2739 | SUMMARY:劳动节假期 2740 | DESCRIPTION:假期第5天 / 共5天 2741 | END:VEVENT 2742 | 2743 | BEGIN:VEVENT 2744 | UID:20260619-0001-0003-0001-0000a95511fe 2745 | DTSTART;VALUE=DATE:20260619 2746 | SUMMARY:端午节假期 2747 | DESCRIPTION:假期第1天 / 共3天 2748 | END:VEVENT 2749 | 2750 | BEGIN:VEVENT 2751 | UID:20260620-0002-0003-0001-0000a95511fe 2752 | DTSTART;VALUE=DATE:20260620 2753 | SUMMARY:端午节假期 2754 | DESCRIPTION:假期第2天 / 共3天 2755 | END:VEVENT 2756 | 2757 | BEGIN:VEVENT 2758 | UID:20260621-0003-0003-0001-0000a95511fe 2759 | DTSTART;VALUE=DATE:20260621 2760 | SUMMARY:端午节假期 2761 | DESCRIPTION:假期第3天 / 共3天 2762 | END:VEVENT 2763 | 2764 | BEGIN:VEVENT 2765 | UID:20260925-0001-0003-0001-0000a95511fe 2766 | DTSTART;VALUE=DATE:20260925 2767 | SUMMARY:中秋节假期 2768 | DESCRIPTION:假期第1天 / 共3天 2769 | END:VEVENT 2770 | 2771 | BEGIN:VEVENT 2772 | UID:20260926-0002-0003-0001-0000a95511fe 2773 | DTSTART;VALUE=DATE:20260926 2774 | SUMMARY:中秋节假期 2775 | DESCRIPTION:假期第2天 / 共3天 2776 | END:VEVENT 2777 | 2778 | BEGIN:VEVENT 2779 | UID:20260927-0003-0003-0001-0000a95511fe 2780 | DTSTART;VALUE=DATE:20260927 2781 | SUMMARY:中秋节假期 2782 | DESCRIPTION:假期第3天 / 共3天 2783 | END:VEVENT 2784 | 2785 | BEGIN:VEVENT 2786 | UID:20261001-0001-0007-0001-0000a95511fe 2787 | DTSTART;VALUE=DATE:20261001 2788 | SUMMARY:国庆节假期 2789 | DESCRIPTION:假期第1天 / 共7天 2790 | END:VEVENT 2791 | 2792 | BEGIN:VEVENT 2793 | UID:20261002-0002-0007-0001-0000a95511fe 2794 | DTSTART;VALUE=DATE:20261002 2795 | SUMMARY:国庆节假期 2796 | DESCRIPTION:假期第2天 / 共7天 2797 | END:VEVENT 2798 | 2799 | BEGIN:VEVENT 2800 | UID:20261003-0003-0007-0001-0000a95511fe 2801 | DTSTART;VALUE=DATE:20261003 2802 | SUMMARY:国庆节假期 2803 | DESCRIPTION:假期第3天 / 共7天 2804 | END:VEVENT 2805 | 2806 | BEGIN:VEVENT 2807 | UID:20261004-0004-0007-0001-0000a95511fe 2808 | DTSTART;VALUE=DATE:20261004 2809 | SUMMARY:国庆节假期 2810 | DESCRIPTION:假期第4天 / 共7天 2811 | END:VEVENT 2812 | 2813 | BEGIN:VEVENT 2814 | UID:20261005-0005-0007-0001-0000a95511fe 2815 | DTSTART;VALUE=DATE:20261005 2816 | SUMMARY:国庆节假期 2817 | DESCRIPTION:假期第5天 / 共7天 2818 | END:VEVENT 2819 | 2820 | BEGIN:VEVENT 2821 | UID:20261006-0006-0007-0001-0000a95511fe 2822 | DTSTART;VALUE=DATE:20261006 2823 | SUMMARY:国庆节假期 2824 | DESCRIPTION:假期第6天 / 共7天 2825 | END:VEVENT 2826 | 2827 | BEGIN:VEVENT 2828 | UID:20261007-0007-0007-0001-0000a95511fe 2829 | DTSTART;VALUE=DATE:20261007 2830 | SUMMARY:国庆节假期 2831 | DESCRIPTION:假期第7天 / 共7天 2832 | END:VEVENT 2833 | 2834 | 2835 | END:VCALENDAR 2836 | --------------------------------------------------------------------------------