關(guān)于時間,我想整點事情,python的一個時間操作類

# -*- coding: utf-8 -*-
# @Author : Pineapple Dong ^_^
# @Time   : 2018/6/13 21:56
# @File   : time_tools.py
import time
import datetime as dt


class TimeTools:
    """
    時間都去哪兒了。。。。。。
    關(guān)于時間,我想整點事情。。。。。。
    一個關(guān)于時間的類。。。。。
    趁開發(fā)小哥改bug,偷摸寫的。。。。。
    """

    format_d_t = "%Y-%m-%d %H:%M:%S"
    format_d = "%Y-%m-%d"

    @classmethod
    def get_format_time(cls, date, format_s: str = None) -> str:
        """
        獲取格式化后的時間(exp:2018-06-13 21:55:55)
        :param date: 需格式化的時間
        :param format_s: 時間格式
        :return:
        """
        try:

            format_s = cls.format_d_t if format_s is None else format_s
            date_t = None

            if isinstance(date, dt.datetime) or isinstance(date, dt.date):
                date_t = date.timetuple()
            elif (isinstance(date, float) or isinstance(date, int)) and len(str(int(date))) == 10:
                date_t = time.localtime(date)
            elif (isinstance(date, float) or isinstance(date, int)) and len(str(int(date))) == 13:
                date_t = time.localtime(date / 1000)

            return time.strftime(format_s, date_t)

        except TypeError:
            pass
        except Exception as e:
            print(e)

    @classmethod
    def get_until_time(cls, date, format_s: str = None) -> dt.datetime:
        """
        獲取指定時間的datetime對象
        :param date: 時間,可為時間戳或者字符串時間
        :param format_s: 時間為字符串時需添加格式
        :return:
        """
        try:

            format_s = cls.format_d_t if format_s is None else format_s
            date_t = None

            if isinstance(date, str):
                date_t = time.strptime(date, format_s)
                # print(date_t)
            elif (isinstance(date, int) or isinstance(date, float)) and len(str(int(date))) == 10:
                date_t = time.localtime(date)
            elif (isinstance(date, int) or isinstance(date, float)) and len(str(int(date))) == 13:
                date_t = time.localtime(date / 1000)

            return dt.datetime(date_t.tm_year,
                               date_t.tm_mon,
                               date_t.tm_mday,
                               date_t.tm_hour,
                               date_t.tm_min,
                               date_t.tm_sec)

        except AttributeError:
            pass
        except Exception as e:
            print(e)

    @classmethod
    def get_seconds(cls, date, format_s: str = None) -> float:
        """
        獲取指定時間的時間戳
        :param date:時間,可為時間戳或者字符串時間
        :param format_s: 時間為字符串時需添加格式
        :return:
        """
        try:
            format_s = cls.format_d_t if format_s is None else format_s
            date_t = None

            if isinstance(date, str):
                date_t = time.strptime(date, format_s)
            if isinstance(date, dt.datetime) or isinstance(date, dt.date):
                date_t = date.timetuple()

            return time.mktime(date_t)

        except TypeError:
            pass
        except Exception as e:
            print(e)

    @classmethod
    def begin_of_day_mills(cls, day=None):
        """
        獲取一天開始時的毫秒時間戳,默認為當(dāng)天
        :param day: 指定時間
        :return:
        """
        try:
            day_u = dt.date.today() if day in (None, "") else cls.get_until_time(day)

            return cls.get_seconds(dt.date(day_u.year, day_u.month, day_u.day)) * 1000

        except AttributeError:
            pass
        except Exception as e:
            print(e)

    @classmethod
    def end_of_day_mills(cls, day=None):
        """
        獲取一天的結(jié)束時間的毫秒時間戳, 默認為當(dāng)天
        :param day: 指定時間
        :return:
        """
        try:

            return cls.begin_of_day_mills(day) + 24 * 60 * 60 * 1000 - 1

        except TypeError:
            pass
        except Exception as e:
            print(e)

    @staticmethod
    def get_month_end_day(year: int, month: int) -> int:
        """
        獲取某年某月的最后一天
        :param year: 某年
        :param month: 某月
        :return:
        """
        days = 31
        while days:
            try:
                datetime.date(year=year, month=month, day=days)
                return days
            except ValueError:
                days -= 1

    @staticmethod
    def begin_of_month_day(month, year=dt.date.today().year):
        """
        獲取某月的第一天
        :param month:
        :param year:
        :return:
        """
        try:

            return dt.date(year, month, 1)

        except ValueError:
            pass

    @classmethod
    def end_of_month_day(cls, month, year=dt.date.today().year):
        """
        獲取某月的最后一天
        :param month:
        :param year:
        :return:
        """
        try:

            return dt.date(year, month, cls.get_month_end_day(year, month))

        except ValueError:
            pass

    @classmethod
    def get_interval_day_by_day(cls, interval: int, date=None):
        """
        獲取某日(默認今天)相隔幾天的日期
        :param interval:正數(shù)為未來,負數(shù)為過去
        :param date:指定日期
        :return:
        """
        try:

            date = dt.date.today() if date is None else date
            date = date if isinstance(date, dt.date) else cls.get_until_time(date, cls.format_d)
            time_del = dt.timedelta(days=interval)

            return date + time_del

        except Exception as e:
            print(e)

    @classmethod
    def different_days(cls, date1: str, date2: str):
        """
        獲取兩個日期之間相差幾天
        :param date1: 指定日期1,格式為(2018-05-22)
        :param date2: 指定日期2,格式為(2018-06-15)
        :return:
        """
        try:

            date1_u = cls.get_until_time(date1, cls.format_d)
            date2_u = cls.get_until_time(date2, cls.format_d)

            return (date1_u - date2_u).days

        except Exception as e:
            print(e)





最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 殘花碎瓣落中空,百感交集無人懂。 姹紫嫣紅隨風(fēng)去,零落成泥也從容!
    abe4c0570901閱讀 164評論 2 2
  • 自然會想到隆冬的壯烈 當(dāng)甜甜的春水款款流來 秋花早已不明去向 青松綻開著奇異的綠 不能與你穿同樣的衣裳 各有自己獨...
    花香一路閱讀 484評論 11 21
  • 今天在停車場遇到了吳迪,起初我根本就沒認出來,當(dāng)他一邊摸著我的頭一邊說小丫頭一點都沒變的時候,我才反應(yīng)過來!是吳迪...
    3154552ea40a閱讀 749評論 0 0

友情鏈接更多精彩內(nèi)容