应用iCalendar库Biweekly求2021年工作日及油价调整时间

2024-03-11 08:32

本文主要是介绍应用iCalendar库Biweekly求2021年工作日及油价调整时间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

应用iCalendar库Biweekly求2021年工作日及油价调整时间

iCalendar有关于重复日程的描述,这里尝试使用这方面描述,并结合用Java语言编写的iCalendar库——Biweekly进行编程。选择描述2021年工作日,再求出具体日期,最后计算2021年油价调整日期作为应用案例。

工作日分成3部分:

  1. 周一到周五
  2. 调班
  3. 调休

周一到周五就用RRULE描述成以星期为周期,直到年底:RRULE:FREQ=WEEKLY;UNTIL=20211231T00000Z;WKST=MO;BYDAY=MO,TU,WE,TH,FR。调班就是周六日休假调整成上班时间,属于增加工作日,用RDATE表示;调休是节日遇上周一到五,要从工作日中去除,所以用EXDATE表示。根据国务院网站《国务院办公厅关于2021年部分节假日安排的通知》:

2021年元旦、春节、清明节、劳动节、端午节、中秋节和国庆节放假调休日期的具体安排通知如下。

一、元旦:2021年1月1日至3日放假,共3天。

二、春节:2月11日至17日放假调休,共7天。2月7日(星期日)、2月20日(星期六)上班。

三、清明节:4月3日至5日放假调休,共3天。

四、劳动节:5月1日至5日放假调休,共5天。4月25日(星期日)、5月8日(星期六)上班。

五、端午节:6月12日至14日放假,共3天。

六、中秋节:9月19日至21日放假调休,共3天。9月18日(星期六)上班。

七、国庆节:10月1日至7日放假调休,共7天。9月26日(星期日)、10月9日(星期六)上班。

  • 调班描述为:RDATE;VALUE=DATE:20210207,20210220,20210425,20210508,20210918,20210926,20211009
  • 调休描述为:EXDATE;VALUE=DATE:20210101,20210211,20210212,20210215,20210216,20210217,20210405,20210503,20210504,20210505,20210614,20210920,20210921,20211001,20211004,20211005,20211006,20211007

写成iCalendar文件workday2021.ics,就是:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Michael Angstadt//biweekly 0.6.3//EN
BEGIN:VEVENT
UID:c6e311c1-cbfe-451e-9548-b7bf575fbfcc
DTSTAMP:20201127T011040Z
SUMMARY:2021年工作日
RRULE:FREQ=WEEKLY;UNTIL=20211231T00000Z;WKST=MO;BYDAY=MO,TU,WE,TH,FR
RDATE;VALUE=DATE:20210207,20210220,20210425,20210508,20210918,20210926,20211009
EXDATE;VALUE=DATE:20210101,20210211,20210212,20210215,20210216,20210217,20210405,20210503,20210504,20210505,20210614,20210920,20210921,20211001,20211004,20211005,20211006,20211007
DTSTART;VALUE=DATE:20210101
DTEND;VALUE=DATE:20211231
END:VEVENT
END:VCALENDAR

然后就用Biweekly库来得到工作日的具体日期。下面是Java源码:

File file = new File("workday2021.ics");
List<ICalendar> icals = Biweekly.parse(file).all(<

这篇关于应用iCalendar库Biweekly求2021年工作日及油价调整时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797261

相关文章

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em