xtn-tools-pro 1.0.0.0.0__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- xtn_tools_pro/__init__.py +10 -0
- xtn_tools_pro/db/MongoDB.py +138 -0
- xtn_tools_pro/db/RedisDB.py +118 -0
- xtn_tools_pro/db/__init__.py +10 -0
- xtn_tools_pro/tools.py +106 -0
- xtn_tools_pro/tools_time.py +142 -0
- xtn_tools_pro-1.0.0.0.0.dist-info/LICENSE +0 -0
- xtn_tools_pro-1.0.0.0.0.dist-info/METADATA +14 -0
- xtn_tools_pro-1.0.0.0.0.dist-info/RECORD +24 -0
- xtn_tools_pro-1.0.0.0.0.dist-info/WHEEL +5 -0
- xtn_tools_pro-1.0.0.0.0.dist-info/top_level.txt +1 -0
- xtnkk_tools/MongoDB.py +137 -0
- xtnkk_tools/__init__.py +10 -0
- xtnkk_tools/db/MongoDB.py +138 -0
- xtnkk_tools/db/__init__.py +10 -0
- xtnkk_tools/tools.py +106 -0
- xtnkk_tools/tools_time.py +142 -0
- xtnkk_tools/update.py +23 -0
- xtnkk_tools_pro/__init__.py +10 -0
- xtnkk_tools_pro/db/MongoDB.py +138 -0
- xtnkk_tools_pro/db/RedisDB.py +118 -0
- xtnkk_tools_pro/db/__init__.py +10 -0
- xtnkk_tools_pro/tools.py +106 -0
- xtnkk_tools_pro/tools_time.py +142 -0
@@ -0,0 +1,138 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
# 说明:
|
5
|
+
# MongoDBPro
|
6
|
+
# History:
|
7
|
+
# Date Author Version Modification
|
8
|
+
# --------------------------------------------------------------------------------------------------
|
9
|
+
# 2024/4/17 xiatn V00.01.000 新建
|
10
|
+
# --------------------------------------------------------------------------------------------------
|
11
|
+
from xtn_tools_pro.tools_time import *
|
12
|
+
from urllib import parse
|
13
|
+
from pymongo import MongoClient as _MongoClient
|
14
|
+
from pymongo.database import Database as _Database
|
15
|
+
from typing import List, Dict, Optional
|
16
|
+
from pymongo.collection import Collection as _Collection
|
17
|
+
from pymongo.errors import DuplicateKeyError, BulkWriteError
|
18
|
+
|
19
|
+
|
20
|
+
class MongoDBPro:
|
21
|
+
def __init__(self, ip=None, port=None, db=None, user_name=None, user_pass=None, url=None, **kwargs):
|
22
|
+
if url:
|
23
|
+
self.client = _MongoClient(url, **kwargs)
|
24
|
+
else:
|
25
|
+
self.client = _MongoClient(host=ip,
|
26
|
+
port=port,
|
27
|
+
username=user_name,
|
28
|
+
password=user_pass,
|
29
|
+
authSource=db)
|
30
|
+
|
31
|
+
self.db = self.get_database(db)
|
32
|
+
|
33
|
+
@classmethod
|
34
|
+
def from_url(cls, url, **kwargs):
|
35
|
+
url_parsed = parse.urlparse(url)
|
36
|
+
# 获取 URL的协议
|
37
|
+
db_type = url_parsed.scheme.strip()
|
38
|
+
if db_type != "mongodb":
|
39
|
+
raise Exception(
|
40
|
+
"url error, expect mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]], but get {}".format(
|
41
|
+
url
|
42
|
+
))
|
43
|
+
return cls(url=url, **kwargs)
|
44
|
+
|
45
|
+
def get_database(self, database, **kwargs) -> _Database:
|
46
|
+
"""
|
47
|
+
根据db名获取数据库对象
|
48
|
+
"""
|
49
|
+
return self.client.get_database(database, **kwargs)
|
50
|
+
|
51
|
+
def get_collection(self, coll_name, **kwargs) -> _Collection:
|
52
|
+
"""
|
53
|
+
根据集合名获取集合对象
|
54
|
+
"""
|
55
|
+
return self.db.get_collection(coll_name, **kwargs)
|
56
|
+
|
57
|
+
def run_command(self, command: Dict):
|
58
|
+
"""
|
59
|
+
参考文档 https://www.geek-book.com/src/docs/mongodb/mongodb/docs.mongodb.com/manual/reference/command/index.html
|
60
|
+
"""
|
61
|
+
return self.db.command(command)
|
62
|
+
|
63
|
+
def find(self, coll_name: str, condition: Optional[Dict] = None,
|
64
|
+
limit: int = 0, **kwargs) -> List[Dict]:
|
65
|
+
"""
|
66
|
+
find
|
67
|
+
coll_name:集合名称
|
68
|
+
condition:查询条件 例如:{"name": "John"}、{"_id": "xxxxx"}
|
69
|
+
"""
|
70
|
+
condition = {} if condition is None else condition
|
71
|
+
command = {"find": coll_name, "filter": condition, "limit": limit}
|
72
|
+
command.update(kwargs)
|
73
|
+
result = self.run_command(command)
|
74
|
+
cursor = result["cursor"]
|
75
|
+
cursor_id = cursor["id"]
|
76
|
+
while True:
|
77
|
+
for document in cursor.get("nextBatch", cursor.get("firstBatch", [])):
|
78
|
+
# 处理数据
|
79
|
+
yield document
|
80
|
+
if cursor_id == 0:
|
81
|
+
# 游标已经完全遍历,没有剩余的结果可供获取
|
82
|
+
# 游标的生命周期已经结束,例如在查询会话结束后。
|
83
|
+
# 游标被显式地关闭,例如使用 db.killCursor() 命令关闭游标。
|
84
|
+
break
|
85
|
+
result = self.run_command(
|
86
|
+
{
|
87
|
+
"getMore": cursor_id, # 类似于mongo命令行中的it命令,通过索引id用于获取下一批结果
|
88
|
+
"collection": coll_name,
|
89
|
+
"batchSize": kwargs.get("batchSize", 100),
|
90
|
+
}
|
91
|
+
)
|
92
|
+
# 覆盖原来的参数
|
93
|
+
cursor = result["cursor"]
|
94
|
+
cursor_id = cursor["id"]
|
95
|
+
# print("下一批获取")
|
96
|
+
|
97
|
+
def add_data_one(self, coll_name: str, data: Dict, insert_ignore=False,
|
98
|
+
is_add_create_time=False,
|
99
|
+
is_add_create_time_field_name="create_dt"):
|
100
|
+
"""
|
101
|
+
添加单条数据
|
102
|
+
coll_name: 集合名
|
103
|
+
data: 单条数据
|
104
|
+
insert_ignore: 索引冲突是否忽略 默认False
|
105
|
+
is_add_create_time: 是否在数据中添加一个创建数据10时间戳字段 默认False不创建
|
106
|
+
is_add_create_time_field_name: 自定义创建数据时间戳字段名:默认:create_dt
|
107
|
+
Returns: 插入成功的行数
|
108
|
+
"""
|
109
|
+
if is_add_create_time:
|
110
|
+
data[is_add_create_time_field_name] = get_time_now_timestamp(is_time_10=True)
|
111
|
+
collection = self.get_collection(coll_name)
|
112
|
+
try:
|
113
|
+
collection.insert_one(data)
|
114
|
+
except DuplicateKeyError as e:
|
115
|
+
if not insert_ignore:
|
116
|
+
raise e
|
117
|
+
return 0
|
118
|
+
return 1
|
119
|
+
|
120
|
+
def find_id_is_exist(self, coll_name, _id):
|
121
|
+
"""
|
122
|
+
根据id查询id是否存在
|
123
|
+
:param _id:id
|
124
|
+
:return: 存在返回True 否则False
|
125
|
+
"""
|
126
|
+
condition = {"_id": _id}
|
127
|
+
status = list(self.find(coll_name, condition))
|
128
|
+
if status:
|
129
|
+
return True
|
130
|
+
return False
|
131
|
+
|
132
|
+
|
133
|
+
if __name__ == '__main__':
|
134
|
+
pass
|
135
|
+
# mongo_db = MongoDBPro("127.0.0.1", 27017, "spider_pro")
|
136
|
+
# # mongo_db.add_data_one("test", {"_id": "1", "data": "aaa"})
|
137
|
+
# print(mongo_db.find_id_is_exist("test", "1"))
|
138
|
+
# print(mongo_db.find_id_is_exist("test", "11"))
|
@@ -0,0 +1,118 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
# 说明:
|
5
|
+
# 程序说明xxxxxxxxxxxxxxxxxxx
|
6
|
+
# History:
|
7
|
+
# Date Author Version Modification
|
8
|
+
# --------------------------------------------------------------------------------------------------
|
9
|
+
# 2024/4/18 xiatn V00.01.000 新建
|
10
|
+
# --------------------------------------------------------------------------------------------------
|
11
|
+
import redis, time
|
12
|
+
|
13
|
+
|
14
|
+
class RedisDBPro:
|
15
|
+
def __init__(self, ip=None, port=None, db=None,
|
16
|
+
user_pass=None, url=None, decode_responses=True, max_connections=1000, **kwargs):
|
17
|
+
|
18
|
+
self._ip = ip
|
19
|
+
self._port = port
|
20
|
+
self._db = db
|
21
|
+
self._user_pass = user_pass
|
22
|
+
self._url = url
|
23
|
+
self._decode_responses = decode_responses # 自动解码返回的字节串
|
24
|
+
self._max_connections = max_connections # 同一个redis对象使用的并发数(连接池的最大连接数),超过这个数量会抛出redis.ConnectionError
|
25
|
+
self._kwargs = kwargs
|
26
|
+
# 连接
|
27
|
+
self.__redis = None
|
28
|
+
self.get_connect()
|
29
|
+
|
30
|
+
@classmethod
|
31
|
+
def from_url(cls, url):
|
32
|
+
"""
|
33
|
+
|
34
|
+
Args:
|
35
|
+
url: redis://[[username]:[password]]@[host]:[port]/[db]
|
36
|
+
|
37
|
+
Returns:
|
38
|
+
|
39
|
+
"""
|
40
|
+
return cls(url=url)
|
41
|
+
|
42
|
+
@property
|
43
|
+
def _redis(self):
|
44
|
+
try:
|
45
|
+
if not self.__redis.ping():
|
46
|
+
raise ConnectionError("unable to connect to redis")
|
47
|
+
except:
|
48
|
+
self._reconnect()
|
49
|
+
|
50
|
+
return self.__redis
|
51
|
+
|
52
|
+
@_redis.setter
|
53
|
+
def _redis(self, val):
|
54
|
+
self.__redis = val
|
55
|
+
|
56
|
+
def _reconnect(self):
|
57
|
+
# 检测连接状态, 当数据库重启或设置 timeout 导致断开连接时自动重连
|
58
|
+
retry_count = 0
|
59
|
+
while True:
|
60
|
+
try:
|
61
|
+
retry_count += 1
|
62
|
+
print("redis 连接断开, 重新连接 {retry_count}".format(retry_count=retry_count))
|
63
|
+
if self.get_connect():
|
64
|
+
print("redis 连接成功")
|
65
|
+
return True
|
66
|
+
except (ConnectionError, TimeoutError) as e:
|
67
|
+
print("连接失败 e: {e}".format(e=e))
|
68
|
+
time.sleep(2)
|
69
|
+
|
70
|
+
def get_connect(self):
|
71
|
+
# 数据库连接
|
72
|
+
try:
|
73
|
+
if not self._url:
|
74
|
+
self._redis = redis.StrictRedis(
|
75
|
+
host=self._ip,
|
76
|
+
port=self._port,
|
77
|
+
db=self._db,
|
78
|
+
password=self._user_pass,
|
79
|
+
decode_responses=self._decode_responses,
|
80
|
+
max_connections=self._max_connections,
|
81
|
+
**self._kwargs,
|
82
|
+
)
|
83
|
+
else:
|
84
|
+
# url连接
|
85
|
+
self._redis = redis.StrictRedis.from_url(
|
86
|
+
self._url, decode_responses=self._decode_responses, **self._kwargs
|
87
|
+
)
|
88
|
+
|
89
|
+
except Exception as e:
|
90
|
+
raise e
|
91
|
+
|
92
|
+
return self.__redis.ping()
|
93
|
+
|
94
|
+
def sadd(self, table, values):
|
95
|
+
"""
|
96
|
+
使用无序set集合存储数据, 去重
|
97
|
+
table:集合名
|
98
|
+
values: 值; 支持list 或 单个值
|
99
|
+
---------
|
100
|
+
@result: 若库中存在 返回0,否则入库,返回1。 批量添加返回None
|
101
|
+
"""
|
102
|
+
if isinstance(values, list):
|
103
|
+
pipe = self._redis.pipeline() # 创建一个pipeline对象,可以添加多个操作,最后execute提交
|
104
|
+
pipe.multi()
|
105
|
+
for value in values:
|
106
|
+
pipe.sadd(table, value)
|
107
|
+
result = pipe.execute()
|
108
|
+
# print(result) # [1, 1, 0, 0, 0, 0, 0]
|
109
|
+
return result.count(1)
|
110
|
+
else:
|
111
|
+
return self._redis.sadd(table, values)
|
112
|
+
|
113
|
+
|
114
|
+
if __name__ == '__main__':
|
115
|
+
pass
|
116
|
+
# r = RedisDBPro(ip="127.0.0.1", port=6379, db=0, user_pass="xtn-kk")
|
117
|
+
# status = r.sadd("test_redis_pro", [1, 2, 3, 4, 5, "6", "7"])
|
118
|
+
# print(status)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
# 说明:
|
5
|
+
# 程序说明xxxxxxxxxxxxxxxxxxx
|
6
|
+
# History:
|
7
|
+
# Date Author Version Modification
|
8
|
+
# --------------------------------------------------------------------------------------------------
|
9
|
+
# 2024/4/18 xiatn V00.01.000 新建
|
10
|
+
# --------------------------------------------------------------------------------------------------
|
xtnkk_tools_pro/tools.py
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
# 说明:
|
5
|
+
# tools
|
6
|
+
# History:
|
7
|
+
# Date Author Version Modification
|
8
|
+
# --------------------------------------------------------------------------------------------------
|
9
|
+
# 2024/4/17 xiatn V00.01.000 新建
|
10
|
+
# --------------------------------------------------------------------------------------------------
|
11
|
+
import hashlib, json, math
|
12
|
+
from urllib.parse import urlencode
|
13
|
+
|
14
|
+
|
15
|
+
def get_md5_32(s, is_upper=False):
|
16
|
+
"""
|
17
|
+
获取文本的md5值 32位
|
18
|
+
:param s: 文本
|
19
|
+
:param is_upper: 是否转大写 默认False
|
20
|
+
:return:
|
21
|
+
"""
|
22
|
+
# s.encode()#变成bytes类型才能加密
|
23
|
+
m = hashlib.md5(s.encode()) # 长度是32
|
24
|
+
if is_upper:
|
25
|
+
return m.hexdigest().upper()
|
26
|
+
return m.hexdigest()
|
27
|
+
|
28
|
+
|
29
|
+
def get_md5_16(s, is_upper=False):
|
30
|
+
"""
|
31
|
+
获取文本的md5值 16位
|
32
|
+
:param s: 文本
|
33
|
+
:param is_upper: 是否转大写 默认False
|
34
|
+
:return:
|
35
|
+
"""
|
36
|
+
result = get_md5_32(s, is_upper)
|
37
|
+
return result[8:24]
|
38
|
+
|
39
|
+
|
40
|
+
def get_file_md5_32(file_path):
|
41
|
+
"""
|
42
|
+
获取文件md5值
|
43
|
+
:param file_path: 文件路径
|
44
|
+
:return:
|
45
|
+
"""
|
46
|
+
with open(file_path, 'rb') as file:
|
47
|
+
data = file.read()
|
48
|
+
md5_hash = hashlib.md5(data).hexdigest()
|
49
|
+
return md5_hash
|
50
|
+
|
51
|
+
|
52
|
+
def get_file_md5_16(file_path):
|
53
|
+
"""
|
54
|
+
获取文件md5值
|
55
|
+
:param file_path: 文件路径
|
56
|
+
:return:
|
57
|
+
"""
|
58
|
+
result = get_file_md5_32(file_path)
|
59
|
+
return result[8:24]
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
def get_str_to_json(str_json):
|
64
|
+
"""
|
65
|
+
字符串类型的json格式 转 json
|
66
|
+
:param str_json: 字符串json
|
67
|
+
:return:
|
68
|
+
"""
|
69
|
+
try:
|
70
|
+
new_str_json = str_json.replace("'", '"'). \
|
71
|
+
replace("None", "null").replace("True", "true"). \
|
72
|
+
replace("False", "false")
|
73
|
+
return json.loads(new_str_json)
|
74
|
+
except Exception as e:
|
75
|
+
return {}
|
76
|
+
|
77
|
+
|
78
|
+
def get_build_url_with_params(url, params):
|
79
|
+
"""
|
80
|
+
传入url和params拼接完整的url ->效果 https://wwww.xxxx.com/?xxx1=1&xxx2=2
|
81
|
+
:param url:
|
82
|
+
:param params:
|
83
|
+
:return:
|
84
|
+
"""
|
85
|
+
encoded_params = urlencode(params)
|
86
|
+
full_url = url + "?" + encoded_params
|
87
|
+
return full_url
|
88
|
+
|
89
|
+
|
90
|
+
def get_calculate_total_page(total, limit):
|
91
|
+
"""
|
92
|
+
根据total和limit计算出一共有多少页
|
93
|
+
:param total:
|
94
|
+
:param limit:
|
95
|
+
:return:
|
96
|
+
"""
|
97
|
+
if limit <= 0:
|
98
|
+
return 0
|
99
|
+
# 根据总条数和limit计算总页数
|
100
|
+
total_pages = math.ceil(total / limit)
|
101
|
+
return total_pages
|
102
|
+
|
103
|
+
|
104
|
+
if __name__ == '__main__':
|
105
|
+
pass
|
106
|
+
|
@@ -0,0 +1,142 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
# 说明:
|
5
|
+
# 程序说明xxxxxxxxxxxxxxxxxxx
|
6
|
+
# History:
|
7
|
+
# Date Author Version Modification
|
8
|
+
# --------------------------------------------------------------------------------------------------
|
9
|
+
# 2024/4/18 xiatn V00.01.000 新建
|
10
|
+
# --------------------------------------------------------------------------------------------------
|
11
|
+
import time, datetime
|
12
|
+
|
13
|
+
|
14
|
+
def get_time_now_timestamp(is_time_10=False, is_time_13=False):
|
15
|
+
"""
|
16
|
+
获取当前时间戳
|
17
|
+
:param is_time_10: 是否需要处理为10位的时间戳,默认不处理
|
18
|
+
:param is_time_13: 是否需要处理为13位的时间戳,默认不处理
|
19
|
+
:return:
|
20
|
+
"""
|
21
|
+
|
22
|
+
if is_time_10:
|
23
|
+
val = int(time.time())
|
24
|
+
elif is_time_13:
|
25
|
+
val = int(time.time() * 1000)
|
26
|
+
else:
|
27
|
+
val = time.time()
|
28
|
+
return val
|
29
|
+
|
30
|
+
|
31
|
+
def get_time_now_day0_timestamp(is_time_13=False):
|
32
|
+
"""
|
33
|
+
获取当天0点时间戳
|
34
|
+
:param is_time_13: 是否需要处理为13位的时间戳,默认不处理并且返回10位时间戳
|
35
|
+
:return:
|
36
|
+
"""
|
37
|
+
val = time.mktime(datetime.date.today().timetuple())
|
38
|
+
if is_time_13:
|
39
|
+
return int(val * 1000)
|
40
|
+
else:
|
41
|
+
return int(val)
|
42
|
+
|
43
|
+
|
44
|
+
def get_time_now_day59_timestamp(is_time_13=False):
|
45
|
+
"""
|
46
|
+
获取当天23:59:59点时间戳
|
47
|
+
:param is_time_13: 是否需要处理为13位的时间戳,默认不处理并且返回10位时间戳
|
48
|
+
:return:
|
49
|
+
"""
|
50
|
+
# 获取当前日期时间
|
51
|
+
now = datetime.datetime.now()
|
52
|
+
# 设置小时、分钟、秒为 23:59:59
|
53
|
+
last_second = now.replace(hour=23, minute=59, second=59)
|
54
|
+
# 转换为时间戳
|
55
|
+
timestamp = time.mktime(last_second.timetuple())
|
56
|
+
# 转换为整数类型
|
57
|
+
if is_time_13:
|
58
|
+
return get_time_10_to_13_timestamp(timestamp)
|
59
|
+
else:
|
60
|
+
return int(timestamp)
|
61
|
+
|
62
|
+
|
63
|
+
def get_time_x_day_timestamp(x, is_time_13=False):
|
64
|
+
"""
|
65
|
+
获取x天的0点的时间戳
|
66
|
+
:param x: 0:当天; 1:1天后; -1:一天前
|
67
|
+
:param is_time_13: 是否需要处理为13位的时间戳,默认不处理并且返回10位时间戳
|
68
|
+
:return:
|
69
|
+
"""
|
70
|
+
if x == 0:
|
71
|
+
date_string = datetime.datetime.now().strftime("%Y-%m-%d") # 当天日期
|
72
|
+
elif x > 0:
|
73
|
+
future_date = datetime.datetime.now() + datetime.timedelta(days=x)
|
74
|
+
date_string = future_date.strftime("%Y-%m-%d") # x天后的日期
|
75
|
+
else:
|
76
|
+
past_date = datetime.datetime.now() - datetime.timedelta(days=abs(x))
|
77
|
+
date_string = past_date.strftime("%Y-%m-%d") # x天前的日期
|
78
|
+
|
79
|
+
timestamp = get_time_datestr_to_timestamp(date_string=date_string, is_time_13=is_time_13)
|
80
|
+
return timestamp
|
81
|
+
|
82
|
+
|
83
|
+
def get_time_datestr_to_timestamp(date_string, date_format="%Y-%m-%d", is_time_13=False):
|
84
|
+
"""
|
85
|
+
根据日期格式转换为时间戳,date_string和date_format需要配合,自行传参修改,这里是以%Y-%m-%d为格式也就是2024-04-18
|
86
|
+
:param date_string: 字符串类型的日期格式 例如:2024-04-18
|
87
|
+
:param date_format: 时间格式
|
88
|
+
:param is_time_13: 是否需要处理为13位的时间戳,默认不处理并且返回10位时间戳
|
89
|
+
:return:
|
90
|
+
"""
|
91
|
+
date_obj = datetime.datetime.strptime(date_string, date_format)
|
92
|
+
timestamp = date_obj.timestamp()
|
93
|
+
if is_time_13:
|
94
|
+
return get_time_10_to_13_timestamp(timestamp)
|
95
|
+
else:
|
96
|
+
return int(timestamp)
|
97
|
+
|
98
|
+
|
99
|
+
def get_time_10_to_13_timestamp(timestamp):
|
100
|
+
"""
|
101
|
+
10位时间戳转13位时间戳
|
102
|
+
:param timestamp:
|
103
|
+
:return:
|
104
|
+
"""
|
105
|
+
val = int(timestamp)
|
106
|
+
if len(str(val)) == 10:
|
107
|
+
return int(val * 1000)
|
108
|
+
return val
|
109
|
+
|
110
|
+
|
111
|
+
def get_time_13_to_10_timestamp(timestamp):
|
112
|
+
"""
|
113
|
+
13位时间戳转10位时间戳
|
114
|
+
:param timestamp:
|
115
|
+
:return:
|
116
|
+
"""
|
117
|
+
val = int(timestamp)
|
118
|
+
if len(str(val)) == 13:
|
119
|
+
return int(val // 1000)
|
120
|
+
return val
|
121
|
+
|
122
|
+
|
123
|
+
def get_time_timestamp_to_datestr(format='%Y-%m-%d %H:%M:%S', now_time=0):
|
124
|
+
"""
|
125
|
+
根据时间戳转换为日期格式,兼容10位时间戳和13位时间戳
|
126
|
+
:param format: 日期格式,常用:%Y-%m-%d %H:%M:%S、%Y-%m-%d、%Y/%m/%d、%H:%M:%S ...
|
127
|
+
:param now_time: 时间戳,默认0表示当前时间戳
|
128
|
+
:return:
|
129
|
+
"""
|
130
|
+
# 根据格式获取当前转换好的时间
|
131
|
+
if not now_time:
|
132
|
+
now_time = get_time_now_timestamp()
|
133
|
+
now_time = get_time_13_to_10_timestamp(now_time)
|
134
|
+
val = time.strftime(format, time.localtime(now_time))
|
135
|
+
return val
|
136
|
+
|
137
|
+
|
138
|
+
if __name__ == '__main__':
|
139
|
+
pass
|
140
|
+
print(get_time_timestamp_to_datestr())
|
141
|
+
print(get_time_timestamp_to_datestr(format="%H:%M:%S", now_time=get_time_now_timestamp(is_time_10=True)))
|
142
|
+
print(get_time_timestamp_to_datestr(now_time=get_time_now_timestamp(is_time_13=True)))
|