日期相关整理
你可以使用 Python 的 datetime
模块来获取上个月月初和月末的日期。以下是一个例子:
from datetime import datetime, timedelta
# 获取当前日期
today = datetime.now()
# 计算上个月的第一天
first_day_of_last_month = datetime(today.year, today.month, 1) - timedelta(days=1)
first_day_of_last_month = datetime(first_day_of_last_month.year, first_day_of_last_month.month, 1)
# 计算上个月的最后一天
last_day_of_last_month = datetime(today.year, today.month, 1) - timedelta(days=1)
# 输出结果
print("上个月的第一天:", first_day_of_last_month.strftime("%Y-%m-%d"))
print("上个月的最后一天:", last_day_of_last_month.strftime("%Y-%m-%d"))
这个例子首先获取当前日期,然后计算上个月的第一天和最后一天。注意,在计算上个月的第一天时,我们先将当前日期减去一天,然后再设置为该月的第一天,这是因为当前月的第一天减去一天即是上个月的最后一天。
这样,first_day_of_last_month
和 last_day_of_last_month
就分别是上个月的月初和月末日期。
跨月的
你可以使用Python的datetime
模块来处理日期,并编写一个函数来划分多个日期。以下是一个示例函数,它接受开始日期和截至日期,然后返回一个包含每个30天区间的日期列表:
from datetime import datetime, timedelta
def split_dates(start_date_str, end_date_str, split_date=30):
start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
end_date = datetime.strptime(end_date_str, "%Y-%m-%d")
delta = timedelta(days=split_date)
date_ranges = []
current_date = start_date
while current_date <= end_date:
next_date = current_date + delta
if next_date > end_date:
next_date = end_date
date_ranges.append((current_date.strftime("%Y-%m-%d"), next_date.strftime("%Y-%m-%d")))
current_date = next_date + timedelta(days=1)
return date_ranges
# 示例用法
start_date_input = "2023-02-02"
end_date_input = "2023-12-31"
result = split_dates(start_date_input, end_date_input)
print(result)
请将start_date_input
和end_date_input
替换为你需要的实际开始日期和截至日期。上述函数返回一个包含每个30天区间的日期范围的列表,每个日期范围由一个元组表示,包含起始日期和结束日期。这些日期以字符串形式返回,你可以根据需要进行进一步处理。
2.不跨月
from datetime import datetime, timedelta
def split_dates(start_date_str, end_date_str, split_days=None):
start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
end_date = datetime.strptime(end_date_str, "%Y-%m-%d")
date_ranges = []
current_date = start_date
while current_date <= end_date:
if current_date.month == 12:
next_date = current_date.replace(year=current_date.year+1, month=1, day=1) # 下一年的第一天
else:
next_date = current_date.replace(month=current_date.month+1, day=1) # 下个月的第一天
if next_date > end_date + timedelta(days=1): # 结束日期的下一天
next_date = end_date + timedelta(days=1)
if split_days is not None and next_date - current_date > timedelta(days=split_days): # 如果跨越了指定的天数
next_date = current_date + timedelta(days=split_days) # 加入天数
date_ranges.append((current_date.strftime("%Y-%m-%d"), (next_date - timedelta(days=1)).strftime("%Y-%m-%d")))
current_date = next_date
return date_ranges
# 示例用法
start_date_input = "2023-02-02"
end_date_input = "2023-12-31"
split_days_input = 30
result = split_dates(start_date_input, end_date_input)
print(result)
如果没有提供 split_days
参数,那么函数会按月份来拆分日期范围;如果提供了 split_days
参数,那么函数会在不跨越月份的前提下,按照指定的天数来拆分日期范围
本文作者: 永生
本文链接: https://yys.zone/detail/?id=319
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
评论列表 (0 条评论)