You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:如何根据月内周数获取周起始日期(周一或周日)及解析'Mar Wk 4 2022'格式数据获取对应周周一起始日期

Calculating Week Start Dates from Month-Week Formats

Hey there! Let's tackle your two related date problems step by step. First, we'll parse that Mar Wk 4 2022 string to extract the year, month, and week number, then we'll compute the start date (either Monday or Sunday) for the specified week in the month.

Step 1: Parse the Month-Week String

First up, we need to pull out the key components from your formatted date string. Here's a straightforward Python function to do that:

import datetime
import calendar

def parse_month_week_string(date_str):
    # Split the string into its parts
    month_abbr, week_part, year_str = date_str.split()
    # Extract week number (strip 'Wk' from the second part)
    week_num = int(week_part.replace('Wk', ''))
    # Convert month abbreviation to numeric month (1-12)
    month = datetime.datetime.strptime(month_abbr, '%b').month
    year = int(year_str)
    
    return year, month, week_num

# Test with your example
year, month, week_num = parse_month_week_string('Mar Wk 4 2022')
print(f"Extracted: Year={year}, Month={month}, Week={week_num}")
# Output: Extracted: Year=2022, Month=3, Week=4

Step 2: Calculate the Week Start Date

Now that we have the core details, let's build functions to get either Monday or Sunday as the week start day. We'll handle edge cases like weeks that start in the previous month.

Option 1: Week Starts on Monday

This function returns the Monday that starts the specified week in the month:

def get_monday_start(year, month, week_num):
    # Configure calendar to use Monday as the first week day
    cal = calendar.Calendar(calendar.MONDAY)
    # Get all weeks in the target month (each week is a list of 7 days; 0 means day isn't in the month)
    month_weeks = cal.monthdayscalendar(year, month)
    
    # Check if the week number is valid (1-5)
    if week_num < 1 or week_num > len(month_weeks):
        return "Invalid week number for this month"
    
    # Grab the target week
    target_week = month_weeks[week_num - 1]
    # Find the first day in this week that belongs to the target month
    first_month_day = next(day for day in target_week if day != 0)
    # Create a date object for that day
    anchor_date = datetime.date(year, month, first_month_day)
    # Calculate the Monday for this week (datetime.weekday() returns 0 for Monday)
    monday = anchor_date - datetime.timedelta(days=anchor_date.weekday())
    
    return monday

# Test your example: 2022 March Week 4 Monday
print(get_monday_start(2022, 3, 4))
# Output: 2022-03-21

Option 2: Week Starts on Sunday

If you need Sunday as the week start day, use this function instead:

def get_sunday_start(year, month, week_num):
    # Configure calendar to use Sunday as the first week day
    cal = calendar.Calendar(calendar.SUNDAY)
    month_weeks = cal.monthdayscalendar(year, month)
    
    if week_num < 1 or week_num > len(month_weeks):
        return "Invalid week number for this month"
    
    target_week = month_weeks[week_num - 1]
    first_month_day = next(day for day in target_week if day != 0)
    anchor_date = datetime.date(year, month, first_month_day)
    # Calculate Sunday (datetime.weekday() returns 6 for Sunday)
    days_to_sunday = (anchor_date.weekday() - 6) % 7
    sunday = anchor_date - datetime.timedelta(days=days_to_sunday)
    
    return sunday

# Example: 2022 March Week 4 Sunday
print(get_sunday_start(2022, 3, 4))
# Output: 2022-03-20

Key Notes to Keep in Mind

  • Week Definition: This logic treats "Week 1" as the first week that contains at least one day of the target month. If you need Week 1 to start exactly on the first day of the month (even if it's a mid-week day), you can adjust the anchor date logic.
  • Edge Cases: Months with 5 weeks will have the 5th week spilling into the next month. The code handles this by anchoring to the first day of the week that's in the target month, then computing the week start from there.

内容的提问来源于stack exchange,提问作者harsha vardhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 01:47:30