1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# -*- coding: utf-8 -*-
"""
@File    : time_helper.py
@Time    : 2023/1/14 17:09
@Author  : geekbing
@LastEditTime : -
@LastEditors : -
@Description : -
"""
 
 
# 获取时间戳
import datetime
import time
 
 
def get_day(days: int = 0, **kwargs) -> str:
    """
    获取日期,默认无连接符格式
    :param days: 负数表示过去,整数表示未来
    :param kwargs: 可选h, m, s
        h: 第n小时
        m: 第n分钟
        s: 第n秒
    :return:
 
    >>> get_day()
    # 今天的日期
 
    >>> get_day(1)
    # 明天的日期
 
    >>> get_day(-1)
    # 昨天的日期
 
    >>> get_day(h=9,m=15,s=30)
    # 今天的9时15分30秒 20230116 9:15:30
 
    >>> get_day(sep='-', h=9,m=15,s=30)
    # 2021-08-07 9:15:30 # 今天的9时15分30秒, 日期分隔符是-
    """
    d = datetime.timedelta(days)
    n = datetime.datetime.now()
    sep: str = kwargs.get("sep", "")
    fmt = sep.join(["%Y", "%m", "%d"])
    if kwargs:
        h = kwargs.get("h", "00")
        m = kwargs.get("m", "00")
        s = kwargs.get("s", "00")
        fmt = f"{fmt} {h}:{m}:{s}"
    return (n + d).strftime(fmt)
 
 
def get_ts(interval: int = 0, t=None) -> str:
    """获取时间戳
    :param interval: 时间间隔,t为None时,时间间隔为秒,其它则为天
    :param t: 要转换成时间戳的时分秒
    :return:
 
    >>> get_ts(0)
    # 当前时间戳
 
    >>> get_ts(0, 9)
    # 今天9点的时间戳
 
    >>> get_ts(1, 9)
    # 明天9点的时间戳
 
    >>> get_ts(0, '9:15')
    # 今天9点15分的时间戳
 
    >>> get_ts(0, '9:15:10')
    # 今天9点15分10秒的时间戳
    """
    if isinstance(interval, int) and t is None:
        return str(int(time.time()) + interval)
    else:
        time_format = "%Y%m%d"
        t = str(t)
        if t.count(":") == 0 and len(t.split()) == 1:
            time_format = time_format + "%H"
        elif t.count(":") == 1 and len(t.split()) == 1:
            time_format = time_format + "%H:%M"
        elif t.count(":") == 2 and len(t.split()) == 1:
            time_format = time_format + "%H:%M:%S"
        time_arr = time.strptime(get_day(interval) + t, time_format)
        return str(int(time.mktime(time_arr)))
 
 
def get_ts_int(interval: int = 0, t=None) -> int:
    """获取时间戳
    :param interval: 时间间隔,t为None时,时间间隔为秒,其它则为天
    :param t: 要转换成时间戳的时分秒
    :return:
    """
    return int(get_ts(interval, t))
 
 
def get_day_fmt(fmt_type="sec", **kwargs):
    """获取日期
 
    fmt_type : str
        日期格式,默认'sec', 包含时分秒, 'day'只包含年月日
    kwargs : str, key可以是days, hours, seconds, 等
        时间差值,负数表示过去,正数表示未来
        昨天:days=-1,明天days=1
 
    >>> get_day_fmt()
    # 当前日期,包含时分秒
    2021-08-07 12:08:54
 
    >>> get_day_fmt('day')
    # 当前日期,只包含年月日
    2021-08-07
 
    # 昨天的日期
    >>> get_day_fmt('day', days=-1)
    2021-08-06
    """
    fmt = "%Y-%m-%d %H:%M:%S"
    if fmt_type == "day":
        fmt = "%Y-%m-%d"
 
    day = datetime.timedelta(**kwargs)
    now = datetime.datetime.now()
    return (now + day).strftime(fmt)
 
 
def get_day_h(days: int = 0, **kwargs):
    """
    >>> get_day_h(0,h=7)
    2021042207
    """
    d = datetime.timedelta(days)
    n = datetime.datetime.now()
    time_str = f"%Y%m%d"
    if kwargs:
        h = str(kwargs.get("h"))
        h = h.rjust(2, "0")
        time_str = f"{time_str}{h}"
    return (n + d).strftime(time_str)
 
 
def get_hour_ts(interval: int = 0) -> str:
    # 当前时间所在的小时,转换为时间戳
    # 2021-3-9 17:0:12, 取2021-3-9 17:0:0,然后转换为时间戳
    now_hour = int(
        datetime.datetime.now().replace(minute=0, second=0, microsecond=0).timestamp()
    )
    return str(now_hour + interval * 3600)
 
 
def get_hour() -> str:
    # 获取当前的小时,不足两位补0
    return str(datetime.datetime.now().hour).rjust(2, "0")
 
 
def get_hour_ts_int(interval: int = 0) -> int:
    return int(get_hour(interval))
 
 
def wait(i: int = 0):
    time.sleep(i)