python对时间的灵活处理

本文介绍了在Python中使用time和datetime模块进行日期和时间的操作,包括获取当前时间、计算过去的时间、转换日期格式以及调整周的起始时间等常见时间处理方法。通过实例展示了如何获取指定日期前的日期、获取前n周的起始时间等功能,对于数据库操作和数据分析非常实用。
摘要由CSDN通过智能技术生成
在将数据存储于MySQL、Oracle等时,对时间的操作会比较频繁,比如,数据第一次保存于数据库的时间(create_time),数据的更新时间(update_time),查询某个时间等等。在对时间进行操作时,往往会涉及到时间、日期、时间戳之间的各种转换,下面简单介绍几个常用的转换方法。

1、用到的模块
用到的模块有两个:time模块和datetime模块

import time,datetime

2、获取不同要求的时间(字符串格式)

from datetime import datetime, timedelta

today = datetime.now()  # 今天
yesterday = today - timedelta(days=1)  # 昨天
last_year_today = datetime(today.year - 1, today.month, today.day)  # 去年今天
if today.month == 1:
    last_month_today = datetime(today.year - 1, 12, today.day, )  # 上月今日
else:
    last_month_today = datetime(today.year, today.month - 1, today.day, )  # 上月今日

print(f'当前时间是:{today}')
print(f'昨天当前时间是:{yesterday}')
print(f'去年今天是:{last_year_today}')
print(f'上月今日是:{last_month_today}')

运行结果:

当前时间是:2022-03-06 17:18:06.242593
昨天当前时间是:2022-03-05 17:18:06.242593
去年今天是:2021-03-06 00:00:00
上月今日是:2022-02-06 00:00:00

3、获取当前时间(指定时间)往前n天的日期

def get_week_day(week):
    week_day_dict = {
        0: '一',
        1: '二',
        2: '三',
        3: '四',
        4: '五',
        5: '六',
        6: '日',
    }
    day = week.weekday()
    return week_day_dict[day]

date0 = '2022-04-06'  # 指定日期
print(f"当期日期为{date0}")
n = -185  # 当前日期前n天
# 将字符串格式的日期转换为datetime.datetime格式,用来判断是周几
date_ori = datetime.strptime(date0, '%Y-%m-%d')
date_n = (date_ori + timedelta(days=n)).strftime("%Y-%m-%d")  # 获取当前日期的前n天日期
print(f"当前日期{date0}的前{abs(n)}天的日期:{date_n}")
print(f'当前日期{date0}的前{abs(n)}天是周{get_week_day(date_ori)}\n')

运行结果

当期日期为2022-04-06
当前日期2022-04-06的前185天的日期:2021-10-03
当前日期2022-04-06的前185天是周三

4、更改周的起始时间,并获取前n周的起始时间

def getNWeeksBefore(today, n):
    ywd = today.isocalendar()  # (year,week,周几)--得要计算的日期是周几
    # 可以根据需要改变判断条件(改变周的起始时间)
    if ywd[2] < 6:
        last_week_end_day = today + timedelta(days=-(ywd[2] + 2))  # 上周的最后一天(周五)
    else:
        last_week_end_day = today + timedelta(days=-(ywd[2] - 5))
    log.info(f'以周六为一周的第一天标准下,上周最后一天是:{last_week_end_day}')
    # 周历史数据,往前倒26周的第一天
    start_day_before26 = last_week_end_day + timedelta(days=(-(n - 1) * 7 - 6))
    return start_day_before26, last_week_end_day


# 将字符串格式的日期转换为datetime.datetime格式,用来判断是周几
date_ori = datetime.strptime(date0, '%Y-%m-%d')

# 当前日期前26周的第一天和上周的最后一天
start_day_before26, last_week_end_day = getNWeeksBefore(date_ori, 26)
print(start_day_before26, last_week_end_day)

运行结果

以周六为一周的第一天标准下,上周最后一天是:2022-04-01 00:00:00

2021-10-02 00:00:00 2022-04-01 00:00:00
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值