Python程序日期时间处理

常用时间

上周

如何判断上周是啥日期?以上周一为例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def get_this_monday():
    today = datetime.today()
    return (today - timedelta(days=today.weekday())).replace(
        hour=0,
        minute=0,
        second=0,
        microsecond=0,
    )

def get_last_monday():
    return get_this_monday() - timedelta(days=7)

函数 get_this_monday 获取本周一的日期,其中第 2 行取出当前时间;第 3-8 行计算得到本周一。

函数 get_last_monday 获取上周一的日期,它先获取本周一的日期,再将其减去 7 天得到上周一。

上月

如何判断上月是何年何月?

可以将月减一,但对于一月份需要做特殊处理:则将年减一,月设置为 12

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import datetime

def get_this_month():
    return datetime.today().replace(day=1, hour=0, minute=0, second=0, microsecond=0)

def get_last_month():
    this_month = get_this_month()
    if this_month.month > 1:
        last_month = this_month.replace(month=this_month.month-1)
    else:
        last_month = this_month.replace(year=this_month.year-1, month=12)
    return last_month

函数 get_this_month 获取本月 1 号的日期,它先取出当前时间,再将日期替换为 1 得到本月 1 号。

函数 get_last_month 先调用 get_this_month 获得本月 1 号的日期,再通过 if 语句判断本月是否为 一月份 ,并据此分别进行处理。这个方法简单粗暴,但是不是很优雅。

优雅思路也有:先将本月 1 号减去一天得到上个月最后一天;再将日期设置为 1 则得到上月 1 号:

1
2
def get_last_month():
    return (get_this_month() - timedelta(days=1)).replace(day=1)

【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注:

【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注: