Python3时间加减运算及其场景

时间加减

datetime.timedelta

In [1]: import datetime

In [2]: datetime.datetime.now().strftime('%Y-%m-%d %H:%M')
Out[2]: '2018-08-24 19:03'

In [3]: (datetime.datetime.now()-datetime.timedelta(hours=1)).strftime('%Y-%m-%d %H:%M')
Out[3]: '2018-08-24 18:03'

场景

昨天

import datetime
yesterday: datetime.date = datetime.date.today() - datetime.timedelta(days=1)
print(yesterday)

上个月

格式:YYYY-MM
示例:2020-03-03的上个月是2020-02

import datetime
# 今天
today: datetime.date = datetime.date.today()
print(today)
# 上个月的最后一天
last_day_of_last_month: datetime.date = today - datetime.timedelta(days=today.day)
print(last_day_of_last_month)
# 上个月
last_month: int = last_day_of_last_month.month
print(last_month)
# 上个月所在的年份
year: int = last_day_of_last_month.year
print(year)
# 上个月【完整格式】
ym: str = '%04d-%02d' % (year, last_month)
print(ym)

上一年

import datetime
last_year: int = datetime.date.today().year - 1
print(last_year)

季度

季度规则月份
Q11、2、3
Q24、5、6
Q37、8、9
Q410、11、12

格式:年Q季度
示例:2021-03-01所属季度为2021Q1,上个季度为2020Q4

from datetime import date, timedelta
from math import ceil
# 今天
today = date.today() - timedelta(days=333)
print(today)
# 本月
this_month = today.month
print(this_month)
# 今年
this_year = today.year
print(this_year)
# 本季度
this_quarter = ceil(this_month / 3)
print(this_quarter)
# 本季度【完整格式】
this_yq = '%04dQ%d' % (this_year, this_quarter)
print(this_yq)
# 上季度
last_quarter = this_quarter - 1
if last_quarter == 0:
    last_yq = '%04dQ%d' % (this_year - 1, 4)
else:
    last_yq = '%04dQ%d' % (this_year, last_quarter)
print(last_yq)

用于数据开发的时间工具类

"""
https://yellow520.blog.youkuaiyun.com/article/details/82024295
"""
from time import time, strftime
from datetime import date, timedelta


class Timer:
    def __init__(self):
        self.t = time()  # 起始秒数

    def __del__(self):
        if self.__str__():
            print('结束时间:%s' % self.now)
            print('运行时间:%s' % self)

    def __str__(self):
        t = self.seconds
        if t < 1:
            return ''
        elif t < 60:
            return '%.2fs' % t
        elif t < 3600:
            return '%.2fmin' % (t / 60)
        else:
            return '%.2fh' % (t / 3600)

    @property
    def seconds(self) -> float:
        """程序运行秒数"""
        return time() - self.t

    @property
    def now(self) -> str:
        return strftime('%Y-%m-%d %H:%M:%S')

    @staticmethod
    def today() -> date:
        return date.today()

    @property
    def yesterday(self) -> str:
        yesterday = self.today() - timedelta(days=1)
        return yesterday.strftime('%Y-%m-%d')

    @property
    def this_year(self) -> int:
        return self.today().year

    @property
    def last_year(self) -> int:
        return self.this_year - 1

    @property
    def this_month(self) -> str:
        """本月,格式:YYYY-MM"""
        return self.today().strftime('%Y-%m')

    @property
    def last_month(self) -> str:
        """上个月,格式:YYYY-MM"""
        last_day_of_last_month = self.today() - timedelta(days=self.today().day)  # 上个月的最后一天
        return last_day_of_last_month.strftime('%Y-%m')


if __name__ == '__main__':
    _t = Timer()
    print(_t.now)
    print(_t.yesterday)
    print(_t.this_month)
    print(_t.last_month)
    print(_t.this_year)
    print(_t.last_year)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值