Как преобразовать строку времени, например «прошлое воскресенье» или «следующий понедельник», в формат даты и времени в python - PullRequest
2 голосов
/ 25 марта 2020

Я пытаюсь найти способ преобразовать строку времени, такую ​​как "прошлое воскресенье" или "Следующий понедельник" , в формат DateTime, используя python 3. Я попытался с помощью следующий:

x = datetime.strptime("Sunday", "%A")

но он дал вывод, подобный этому:

1900-01-01 00:00:00

Я хочу знать, как получить дату по отношению к текущей дате!

Спасибо:)

1 Ответ

1 голос
/ 25 марта 2020

Мое предложение: создайте вспомогательный индекс, чтобы узнать, сколько дней вперед или до этого дня, а затем работайте с timedelta. Следующий код должен продемонстрировать, что я имею в виду, а не супер Pythoni c, но он подходит для ваших примеров.

from datetime import datetime
from datetime import timedelta

now = datetime.now()
nowDayString = now.strftime("%A")
days = [
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
    "Sunday"
]


def buildLut():
    floatingDays = [""]*8
    for idx, day in enumerate(days):
        if day == nowDayString:
            floatingDays[0] = nowDayString
            floatingDays[7] = nowDayString
            for i, j in zip(range(idx+1, len(days)), range(1, len(days))):
                floatingDays[j] = days[i]
            for i in range(idx):
                floatingDays[7-(idx-i)] = days[i]
    return floatingDays


def findme(s):
    td = timedelta()
    dayToLookFor = s.split(" ")[1]
    if "last" in s.lower():
        td = timedelta(days=-(7 - floatingDays.index(dayToLookFor)))
    elif "next" in s.lower():
        td = timedelta(days=floatingDays.index(dayToLookFor))
    return now + td


floatingDays = buildLut()
print(floatingDays)

print(findme("last Sunday"))

print(findme("Next Monday"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...