在中国,如果法定节假日的日期和周末重叠,那么政府会安排另外的工作日来调休。以下是一个Python代码示例,用于生成2023年所有非工作日的日期列表,其中包括法定节假日和周末,但不包括调休上班的周末:

from datetime import datetime, timedelta

# 定义一个函数来判断是否是周末
def is_weekend(date):
    return date.weekday() >= 5

# 定义起始和结束日期
start_date = datetime(2023, 1, 1)
end_date = datetime(2023, 12, 31)

# 定义2023年的法定节假日和调休上班的日期
holidays = [
    (datetime(2023, 1, 1), datetime(2023, 1, 3)),  # 元旦
    (datetime(2023, 1, 21), datetime(2023, 1, 27)),  # 春节
    (datetime(2023, 4, 5), datetime(2023, 4, 5)),  # 清明节
    (datetime(2023, 4, 29), datetime(2023, 5, 3)),  # 劳动节
    (datetime(2023, 6, 22), datetime(2023, 6, 24)),  # 端午节
    (datetime(2023, 9, 29), datetime(2023, 10, 6))   # 中秋节、国庆节
]

workdays = [
    # 调休上班的日期
    datetime(2023, 1, 28), # 春节后调休
    datetime(2023, 1, 29), # 春节后调休
    datetime(2023, 4, 23), # 劳动节前调休
    datetime(2023, 5, 6), # 劳动节后调休
    datetime(2023, 6,25), # 端午节后调休
    datetime(2023,10 ,7), # 国庆节后调休
    datetime(2023 ,10 ,8) # 国庆节后调休
]

# 初始化一个空列表来存储所有的非工作日日期
non_working_days = []

# 判断一个日期是否是节假日
def is_holiday(date):
    for start, end in holidays:
        if start <= date <= end:
            return True
    return False

# 判断一个日期是否是调休上班的日期
def is_workday(date):
    return date in workdays

# 从起始日期开始,每次增加一天,直到结束日期
current_date = start_date
while current_date <= end_date:
    # 如果当前日期是周末或者节假日,并且不是调休上班的日期,就添加到列表中
    if (is_weekend(current_date) or is_holiday(current_date)) and not is_workday(current_date):
        non_working_days.append(current_date.strftime('%Y-%m-%d'))
    # 增加一天
    current_date += timedelta(days=1)

print("2023年的所有非工作日日期:")
data_list = []
for date in non_working_days:
    print(date)
    data_list.append(date)

print(data_list)

这段代码首先定义了一个函数is_weekend来判断一个日期是否是周末。然后定义了起始日期(2023年1月1日)和结束日期(2023年12月31日)。接着初始化了一个空列表non_working_days来存储所有的非工作日日期。

然后,代码从起始日期开始,每次增加一天,直到结束日期。如果当前日期是周末或者节假日,并且不是调休上班的日期,就把它添加到non_working_days列表中。

最后,打印出了2023年的所有非工作日日期。

 

2023年非工作日

 

from datetime import datetime, timedelta

# 定义一个函数来判断是否是周末
def is_weekend(date):
    return date.weekday() >= 5

# 定义起始和结束日期
start_date = datetime(2024, 1, 1)
end_date = datetime(2024, 12, 31)

# 定义2024年的法定节假日和调休上班的日期[^1^][1]
holidays = [
    (datetime(2024, 1, 1), datetime(2024, 1, 1)),  # 元旦
    (datetime(2024, 2, 10), datetime(2024, 2, 17)),  # 春节
    (datetime(2024, 4, 4), datetime(2024, 4, 6)),  # 清明节
    (datetime(2024, 5, 1), datetime(2024, 5, 5)),  # 劳动节
    (datetime(2024, 6, 10), datetime(2024, 6, 10)), # 端午节
    (datetime(2024, 9, 15), datetime(2024, 9, 17)), # 中秋节
    (datetime(2024, 10, 1), datetime(2024, 10, 7))   # 国庆节
]

workdays = [
    # 调休上班的日期
    datetime(2024,2 ,4), # 春节前调休
    datetime(2024 ,2 ,18), # 春节后调休
    datetime(2024 ,4 ,7), # 清明节后调休
    datetime(2024 ,5 ,11), # 劳动节后调休
    datetime(2024 ,9 ,14) # 中秋节前调休
]

# 初始化一个空列表来存储所有的非工作日日期
non_working_days = []

# 判断一个日期是否是节假日
def is_holiday(date):
    for start, end in holidays:
        if start <= date <= end:
            return True
    return False

# 判断一个日期是否是调休上班的日期
def is_workday(date):
    return date in workdays

# 计算非工作日日期列表
current_date = start_date
while current_date <= end_date:
    if (is_weekend(current_date) or is_holiday(current_date)) and not is_workday(current_date):
        non_working_days.append(current_date.strftime('%Y-%m-%d'))
    current_date += timedelta(days=1)

print("2024年的所有非工作日日期:")
for date in non_working_days:
    print(date)

计算上一个工作日

import datetime

# 提供的日期列表
holidays = ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-07', '2023-01-08', '2023-01-14', '2023-01-15', '2023-01-21', '2023-01-22', '2023-01-23', '2023-01-24', '2023-01-25', '2023-01-26', '2023-01-27', '2023-02-04', '2023-02-05', '2023-02-11', '2023-02-12', '2023-02-18', '2023-02-19', '2023-02-25', '2023-02-26', '2023-03-04', '2023-03-05', '2023-03-11', '2023-03-12', '2023-03-18', '2023-03-19', '2023-03-25', '2023-03-26', '2023-04-01', '2023-04-02', '2023-04-05', '2023-04-08', '2023-04-09', '2023-04-15', '2023-04-16', '2023-04-22', '2023-04-29', '2023-04-30', '2023-05-01', '2023-05-02', '2023-05-03', '2023-05-07', '2023-05-13', '2023-05-14', '2023-05-20', '2023-05-21', '2023-05-27', '2023-05-28', '2023-06-03', '2023-06-04', '2023-06-10', '2023-06-11', '2023-06-17', '2023-06-18', '2023-06-22', '2023-06-23', '2023-06-24', '2023-07-01', '2023-07-02', '2023-07-08', '2023-07-09', '2023-07-15', '2023-07-16', '2023-07-22', '2023-07-23', '2023-07-29', '2023-07-30', '2023-08-05', '2023-08-06', '2023-08-12', '2023-08-13', '2023-08-19', '2023-08-20', '2023-08-26', '2023-08-27', '2023-09-02', '2023-09-03', '2023-09-09', '2023-09-10', '2023-09-16', '2023-09-17', '2023-09-23', '2023-09-24', '2023-09-29', '2023-09-30', '2023-10-01', '2023-10-02', '2023-10-03', '2023-10-04', '2023-10-05', '2023-10-06', '2023-10-14', '2023-10-15', '2023-10-21', '2023-10-22', '2023-10-28', '2023-10-29', '2023-11-04', '2023-11-05', '2023-11-11', '2023-11-12', '2023-11-18', '2023-11-19', '2023-11-25', '2023-11-26', '2023-12-02', '2023-12-03', '2023-12-09', '2023-12-10', '2023-12-16', '2023-12-17', '2023-12-23', '2023-12-24', '2023-12-30', '2023-12-31']

# 获取当前日期
today = datetime.datetime.now().date()

# 初始化一个日期偏移值
offset = 1

# 循环查找上一个工作日
while True:
    previous_day = today - datetime.timedelta(days=offset)
    if previous_day.strftime('%Y-%m-%d') not in holidays and previous_day.weekday() < 5:
        break
    offset += 1

print("今天日期:", today.strftime('%Y-%m-%d'))
print("上一个工作日日期:", previous_day.strftime('%Y-%m-%d'))