Python получить дату от дня недели - PullRequest
0 голосов
/ 06 апреля 2020

Допустим, у меня есть 11 сессий для себя. Я не установил даты этих сессий, а просто будние дни, когда будет проходить одна сессия. Допустим, при планировании этих сессий я выбрал MON, TUE и WED. Это означает, что после сегодняшнего дня я хочу, чтобы даты моих 11 сессий были 4 понедельника, 4 вторника и 3 среды, после которых мои сессии будут завершены.

Я хочу автоматически получить даты этих сессий дней до 11 дней.

Я действительно надеюсь, что это имеет смысл ... Пожалуйста, помогите мне. Я почесал голову над этим 3 часа подряд.

Спасибо,

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Вы можете использовать pd.date_range и объект CustomBusinessDay , чтобы сделать это очень легко.

Вы можете использовать CustomBusinessDay, чтобы указать свои "рабочие дни" и создайте свой диапазон дат из этого:

import pandas
from datetime import date

session_days = pd.offset.CustomBusinessDay(weekmask="Mon Tue Wed")
dates = pd.date_range(date.today(), freq=session_days, periods=11)
0 голосов
/ 06 апреля 2020

Я понял это некоторое время go, но мой inte rnet умер. Все, что потребовалось, это Данхилл и немного отдыха.

import datetime


def get_dates():
    #This is the max number of dates you want. In my case, sessions.
    required_sessions = 11
    #These are the weekdays you want these sessions to be
    days = [1,2,3]
    #An empty list to store the dates you get
    dates = []
    #Initialize a variable for the while loop
    current_sessions = 0
    #I will start counting from today but you can choose any date
    now = datetime.datetime.now()
    #For my use case, I don't want a session on the same day I run this function.
    #I will start counting from the next day
    if now.weekday() in days:
        now = now + datetime.timedelta(days=1)

    while current_sessions != required_sessions:
        #Iterate over every day in your desired days
        for day in days:
            #Just a precautionary measure so the for loops breaks as soon as you have the max number of dates
            #Or the while loop will run for ever
            if current_sessions == required_sessions:
                break
            #If it's Saturday, you wanna hop onto the next week
            if now.weekday() == 6:
                #Check if Sunday is in the days, add it
                if 0 in days:
                    date = now + datetime.timedelta(days=1)
                    dates.append(date)
                    current_sessions += 1
                    now = date
            else:
                #Explains itself.
                if now.weekday() == day:
                    dates.append(now)
                    now = now + datetime.timedelta(days=1)
                    current_sessions += 1
                #If the weekday today is greater than the day you're iterating over, this means you've iterated over all the days in a NUMERIC ORDER
                #NOTE: This only works if the days in your "days" list are in a correct numeric order meaning 0 - 6. If it's random, you'll have trouble
                elif not now.weekday() > day:
                    difference = day - now.weekday()
                    date = now + datetime.timedelta(days=difference)
                    dates.append(date)
                    now = date
                    current_sessions += 1
        #Reset the cycle after the for loop is done so you can hop on to the next week.
        reset_cycle_days = 6 - now.weekday()
        if reset_cycle_days == 0:
            original_now = now + datetime.timedelta(days=1)
            now = original_now
        else:
            original_now = now + datetime.timedelta(days=reset_cycle_days)
            now = original_now
    for date in dates:(
        print(date.strftime("%d/%m/%y"), date.weekday()))

Кстати, я знаю, что этот ответ бессмыслен по сравнению с ответом @Daniel Geffen. Если бы я был тобой, я бы определенно выбрал его ответ, так как он очень прост. Это был только мой вклад в мой собственный вопрос на случай, если кто-то захочет перейти к «техническим возможностям» того, как это делается, просто используя datetime. Для меня это работает лучше всего, так как у меня проблемы с _bz2 в Python3 .7.

Спасибо всем за помощь.

...