获取dt obj属性的更简单方法

2024-10-04 11:27:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图获取到2024年之前我所有生日的详细日历信息(即周、星期几等)。我注意到Pandasdate_range函数/方法,但我尝试使用time/datetime来实现它,因为我无法让“freq=”工作。这就是我到目前为止所拥有的,我想我可以从myBirthdays列表中得到我所需要的,但是我想知道是否有更简单的方法?好像有很多额外的工作

蒂亚

#import pandas as pd
from datetime import date
import time

def BdayList(birthdate, enddate):
    print(birthdate, type(birthdate), endDate, type(endDate))
    #print(birthdate.weekday(), endDate.isocalendar())
    myMonth =  date.strftime(birthdate, "%m")
    myDay = date.strftime(birthdate, "%d")
    myBirthDays = []
    daysDelta = (enddate - birthdate)
    daysDeltaInt = daysDelta.days / 365
    for year in range(int(date.strftime(birthdate, "%Y")), int(date.strftime(enddate, "%Y"))):   #13148
        year = str(year)
        myBirthday = time.strptime(year+" "+myMonth+" "+myDay, "%Y %m %d") 
        print(myBirthday)
        myBirthDays.append(myBirthday)

    #dateRange = pd.date_range(start, periods = NumPeriods, freq="A")

    return myBirthDays#DaysDelta, type(DaysDelta)
myBday = date(1988, 12, 22)    
endDate = date(2024, 12, 22)
BdayList(myBday, endDate)

time.struct_time(tm_year=1988, tm_mon=12, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=357, tm_isdst=-1)

Tags: 方法importdatetimetyperangeyearbirthdate
1条回答
网友
1楼 · 发布于 2024-10-04 11:27:22

因为可以只替换原始出生日期中的年份,所以不需要在日期和字符串之间切换(注意,我还对代码进行了PEP8处理,并使用了稍微不同的变量名+添加了type hints

from datetime import date
from typing import List
from pprint import pprint


def get_birthdays(birth_date: date, end_date: date) -> List[date]:
    birthday_list = list()
    while birth_date <= end_date:
        birthday_list.append(birth_date)
        birth_date = birth_date.replace(year=birth_date.year + 1)
    return birthday_list


if __name__ == "__main__":
    birthdays = get_birthdays(
        birth_date=date(1988, month=12, day=22),
        end_date=date(2024, month=12, day=22)
    )
    pprint([(x.strftime("%Y-%m-%d %A, week: %U")) for x in birthdays])

输出应为:

['1988-12-22 Thursday, week: 51',
 '1989-12-22 Friday, week: 51',
 '1990-12-22 Saturday, week: 50',
 '1991-12-22 Sunday, week: 51',
 '1992-12-22 Tuesday, week: 51',
 '1993-12-22 Wednesday, week: 51',
 '1994-12-22 Thursday, week: 51',
 '1995-12-22 Friday, week: 51']

要格式化输出,请检查datetime文档。希望这有帮助

相关问题 更多 >