#python #datetime
#python #datetime
Вопрос:
Допустим, у меня есть дата 12/8/2020. Есть ли функция, которая выводила бы, что это был 2-й вторник декабря?
Кроме того, я хотел бы найти способ сделать обратное. Введите 2-й вторник декабря 2020 года, и он выведет 12/8/2020.
Комментарии:
1. Что, если кто-то спросит 6-й вторник декабря?
2. Предположим, что никто этого не сделает, ха-ха. У меня хорошие друзья
Ответ №1:
datetime
модуль (или дружественная версия с оболочкой pandas) обладает большей частью необходимой вам функциональности. Вы можете использовать humanize
(или написать свою собственную) функцию для преобразования числа в ординальность:
import pandas as pd
import humanize
def day_in_month(date_str):
dt = pd.to_datetime(date_str)
dow = dt.day_name()
dow_ord = 1 (dt.day - 1)//7
dow_ord_str = humanize.ordinal(dow_ord)
month = dt.month_name()
year = dt.year
output = f"{dow_ord_str} {dow} of {month} in {year}"
return output
date_str = "12/8/2020"
day_in_month(date_str)
вывод:
'2nd Tuesday of December in 2020'
Комментарии:
1. Есть ошибка,
dow_ord = 1 dt.day // 7
и я не могу ее хорошо объяснить, ноdow_ord = math.ceil(dt.day / 7)
даст правильный результат. (Необходимо импортировать математику) В том виде, в котором он находится сейчас, он увеличивает порядковый номер на один раз раньше.2. То есть он неправильно скажет
2nd
понедельник 7 декабря. когда он должен сказать1st
понедельник. для 7 декабря (2020) (то же самое происходит 14,21 и 28)3. Хорошо, я работал над этим сам. Я не знал о пакете humanize — рад его видеть.