re-common 10.0.22__py3-none-any.whl → 10.0.24__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- re_common/baselibrary/__init__.py +4 -4
- re_common/baselibrary/baseabs/__init__.py +6 -6
- re_common/baselibrary/baseabs/baseabs.py +26 -26
- re_common/baselibrary/database/mbuilder.py +132 -132
- re_common/baselibrary/database/moudle.py +93 -93
- re_common/baselibrary/database/msqlite3.py +194 -194
- re_common/baselibrary/database/mysql.py +169 -169
- re_common/baselibrary/database/sql_factory.py +26 -26
- re_common/baselibrary/mthread/MThreadingRun.py +486 -486
- re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
- re_common/baselibrary/mthread/__init__.py +2 -2
- re_common/baselibrary/mthread/mythreading.py +695 -695
- re_common/baselibrary/pakge_other/socks.py +404 -404
- re_common/baselibrary/readconfig/config_factory.py +18 -18
- re_common/baselibrary/readconfig/ini_config.py +317 -317
- re_common/baselibrary/readconfig/toml_config.py +49 -49
- re_common/baselibrary/temporary/envdata.py +36 -36
- re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
- re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
- re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
- re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
- re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
- re_common/baselibrary/tools/contrast_db3.py +123 -123
- re_common/baselibrary/tools/copy_file.py +39 -39
- re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
- re_common/baselibrary/tools/foreachgz.py +39 -39
- re_common/baselibrary/tools/get_attr.py +10 -10
- re_common/baselibrary/tools/image_to_pdf.py +61 -61
- re_common/baselibrary/tools/java_code_deal.py +139 -139
- re_common/baselibrary/tools/javacode.py +79 -79
- re_common/baselibrary/tools/mdb_db3.py +48 -48
- re_common/baselibrary/tools/merge_file.py +171 -171
- re_common/baselibrary/tools/merge_gz_file.py +165 -165
- re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
- re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
- re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
- re_common/baselibrary/tools/mongo_tools.py +50 -50
- re_common/baselibrary/tools/move_file.py +170 -170
- re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
- re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
- re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
- re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
- re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
- re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
- re_common/baselibrary/tools/myparsel.py +104 -104
- re_common/baselibrary/tools/rename_dir_file.py +37 -37
- re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
- re_common/baselibrary/tools/split_line_to_many.py +25 -25
- re_common/baselibrary/tools/stringtodicts.py +33 -33
- re_common/baselibrary/tools/workwechant_bot.py +84 -84
- re_common/baselibrary/utils/baseaiohttp.py +296 -296
- re_common/baselibrary/utils/baseaiomysql.py +87 -87
- re_common/baselibrary/utils/baseallstep.py +191 -191
- re_common/baselibrary/utils/baseavro.py +19 -19
- re_common/baselibrary/utils/baseboto3.py +291 -291
- re_common/baselibrary/utils/basecsv.py +32 -32
- re_common/baselibrary/utils/basedict.py +133 -133
- re_common/baselibrary/utils/basedir.py +241 -241
- re_common/baselibrary/utils/baseencode.py +351 -351
- re_common/baselibrary/utils/baseencoding.py +28 -28
- re_common/baselibrary/utils/baseesdsl.py +86 -86
- re_common/baselibrary/utils/baseexcel.py +264 -264
- re_common/baselibrary/utils/baseexcept.py +109 -109
- re_common/baselibrary/utils/basefile.py +654 -654
- re_common/baselibrary/utils/baseftp.py +214 -214
- re_common/baselibrary/utils/basegzip.py +60 -60
- re_common/baselibrary/utils/basehdfs.py +135 -135
- re_common/baselibrary/utils/basehttpx.py +268 -268
- re_common/baselibrary/utils/baseip.py +87 -87
- re_common/baselibrary/utils/basejson.py +2 -2
- re_common/baselibrary/utils/baselist.py +32 -32
- re_common/baselibrary/utils/basemotor.py +190 -190
- re_common/baselibrary/utils/basemssql.py +98 -98
- re_common/baselibrary/utils/baseodbc.py +113 -113
- re_common/baselibrary/utils/basepandas.py +302 -302
- re_common/baselibrary/utils/basepeewee.py +11 -11
- re_common/baselibrary/utils/basepika.py +180 -180
- re_common/baselibrary/utils/basepydash.py +143 -143
- re_common/baselibrary/utils/basepymongo.py +230 -230
- re_common/baselibrary/utils/basequeue.py +22 -22
- re_common/baselibrary/utils/baserar.py +57 -57
- re_common/baselibrary/utils/baserequest.py +279 -279
- re_common/baselibrary/utils/baseset.py +8 -8
- re_common/baselibrary/utils/basesmb.py +403 -403
- re_common/baselibrary/utils/basestring.py +382 -382
- re_common/baselibrary/utils/basetime.py +320 -320
- re_common/baselibrary/utils/baseurl.py +121 -121
- re_common/baselibrary/utils/basezip.py +57 -57
- re_common/baselibrary/utils/core/__init__.py +7 -7
- re_common/baselibrary/utils/core/bottomutils.py +18 -18
- re_common/baselibrary/utils/core/mdeprecated.py +327 -327
- re_common/baselibrary/utils/core/mlamada.py +16 -16
- re_common/baselibrary/utils/core/msginfo.py +25 -25
- re_common/baselibrary/utils/core/requests_core.py +103 -103
- re_common/baselibrary/utils/fateadm.py +429 -429
- re_common/baselibrary/utils/importfun.py +123 -123
- re_common/baselibrary/utils/mfaker.py +57 -57
- re_common/baselibrary/utils/my_abc/__init__.py +3 -3
- re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
- re_common/baselibrary/utils/mylogger.py +414 -414
- re_common/baselibrary/utils/myredisclient.py +861 -861
- re_common/baselibrary/utils/pipupgrade.py +21 -21
- re_common/baselibrary/utils/ringlist.py +85 -85
- re_common/baselibrary/utils/version_compare.py +36 -36
- re_common/baselibrary/utils/ydmhttp.py +126 -126
- re_common/facade/lazy_import.py +11 -11
- re_common/facade/loggerfacade.py +25 -25
- re_common/facade/mysqlfacade.py +467 -467
- re_common/facade/now.py +31 -31
- re_common/facade/sqlite3facade.py +257 -257
- re_common/facade/use/mq_use_facade.py +83 -83
- re_common/facade/use/proxy_use_facade.py +19 -19
- re_common/libtest/base_dict_test.py +19 -19
- re_common/libtest/baseavro_test.py +13 -13
- re_common/libtest/basefile_test.py +14 -14
- re_common/libtest/basemssql_test.py +77 -77
- re_common/libtest/baseodbc_test.py +7 -7
- re_common/libtest/basepandas_test.py +38 -38
- re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
- re_common/libtest/get_attr_test/settings.py +54 -54
- re_common/libtest/idencode_test.py +53 -53
- re_common/libtest/iniconfig_test.py +35 -35
- re_common/libtest/ip_test.py +34 -34
- re_common/libtest/merge_file_test.py +20 -20
- re_common/libtest/mfaker_test.py +8 -8
- re_common/libtest/mm3_test.py +31 -31
- re_common/libtest/mylogger_test.py +88 -88
- re_common/libtest/myparsel_test.py +27 -27
- re_common/libtest/mysql_test.py +151 -151
- re_common/libtest/pymongo_test.py +21 -21
- re_common/libtest/split_test.py +11 -11
- re_common/libtest/sqlite3_merge_test.py +5 -5
- re_common/libtest/sqlite3_test.py +34 -34
- re_common/libtest/tomlconfig_test.py +30 -30
- re_common/libtest/use_tools_test/__init__.py +2 -2
- re_common/libtest/user/__init__.py +4 -4
- re_common/studio/__init__.py +4 -4
- re_common/studio/assignment_expressions.py +36 -36
- re_common/studio/mydash/test1.py +18 -18
- re_common/studio/pydashstudio/first.py +9 -9
- re_common/studio/streamlitstudio/first_app.py +65 -65
- re_common/studio/streamlitstudio/uber_pickups.py +23 -23
- re_common/studio/test.py +18 -18
- re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +195 -0
- re_common/v2/baselibrary/business_utils/__init__.py +0 -0
- re_common/v2/baselibrary/business_utils/rel_tools.py +6 -0
- re_common/v2/baselibrary/decorators/utils.py +59 -59
- re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
- re_common/v2/baselibrary/tools/WeChatRobot.py +95 -79
- re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
- re_common/v2/baselibrary/tools/dict_tools.py +37 -37
- re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
- re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
- re_common/v2/baselibrary/tools/list_tools.py +65 -65
- re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
- re_common/v2/baselibrary/tools/text_matcher.py +326 -326
- re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
- re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
- re_common/v2/baselibrary/utils/author_smi.py +360 -360
- re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
- re_common/v2/baselibrary/utils/basedict.py +37 -37
- re_common/v2/baselibrary/utils/basehdfs.py +161 -161
- re_common/v2/baselibrary/utils/basepika.py +180 -180
- re_common/v2/baselibrary/utils/basetime.py +77 -77
- re_common/v2/baselibrary/utils/db.py +38 -38
- re_common/v2/baselibrary/utils/json_cls.py +16 -16
- re_common/v2/baselibrary/utils/mq.py +83 -83
- re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
- re_common/v2/baselibrary/utils/string_bool.py +186 -149
- re_common/v2/baselibrary/utils/string_clear.py +227 -204
- re_common/v2/baselibrary/utils/string_smi.py +18 -18
- re_common/v2/baselibrary/utils/stringutils.py +213 -213
- re_common/vip/base_step_process.py +11 -11
- re_common/vip/baseencodeid.py +90 -90
- re_common/vip/changetaskname.py +28 -28
- re_common/vip/core_var.py +24 -24
- re_common/vip/mmh3Hash.py +89 -89
- re_common/vip/proxy/allproxys.py +127 -127
- re_common/vip/proxy/allproxys_thread.py +159 -159
- re_common/vip/proxy/cnki_proxy.py +153 -153
- re_common/vip/proxy/kuaidaili.py +87 -87
- re_common/vip/proxy/proxy_all.py +113 -113
- re_common/vip/proxy/update_kuaidaili_0.py +42 -42
- re_common/vip/proxy/wanfang_proxy.py +152 -152
- re_common/vip/proxy/wp_proxy_all.py +181 -181
- re_common/vip/read_rawid_to_txt.py +91 -91
- re_common/vip/title/__init__.py +5 -5
- re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
- re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
- re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
- re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
- re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
- re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
- re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
- re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
- re_common/vip/title/transform/__init__.py +10 -10
- {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/LICENSE +201 -201
- {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/METADATA +16 -16
- re_common-10.0.24.dist-info/RECORD +230 -0
- {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/WHEEL +1 -1
- re_common-10.0.22.dist-info/RECORD +0 -227
- {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/top_level.txt +0 -0
|
@@ -1,320 +1,320 @@
|
|
|
1
|
-
import datetime
|
|
2
|
-
import time
|
|
3
|
-
from calendar import monthrange, Calendar
|
|
4
|
-
# timedalte 是datetime中的一个对象,该对象表示两个时间的差值
|
|
5
|
-
from datetime import timedelta
|
|
6
|
-
|
|
7
|
-
# microseconds (毫秒) 1 second = 1000 milliseconds
|
|
8
|
-
# milliseconds (微秒) 1 milliseconds = 1000 milliseconds
|
|
9
|
-
"""
|
|
10
|
-
%Y 完整的年份
|
|
11
|
-
%m 月份(01 - 12)
|
|
12
|
-
%d 一个月中的第几天(01 - 31)
|
|
13
|
-
%H 一天中的第几个小时(24小时制,00 - 23)
|
|
14
|
-
%M 分钟数(00 - 59)
|
|
15
|
-
%S 秒(01 - 61)
|
|
16
|
-
%X 本地相应时间
|
|
17
|
-
%x 本地相应日期
|
|
18
|
-
%a 本地(locale)简化星期名称
|
|
19
|
-
%A 本地完整星期名称
|
|
20
|
-
%b 本地简化月份名称
|
|
21
|
-
%B 本地完整月份名称
|
|
22
|
-
%c 本地相应的日期和时间表示
|
|
23
|
-
%I 第几个小时(12小时制,01 - 12)
|
|
24
|
-
%j 一年中的第几天(001 - 366)
|
|
25
|
-
%p 本地am或者pm的相应符
|
|
26
|
-
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)
|
|
27
|
-
%w 一个星期中的第几天(0 - 6,0是星期天)
|
|
28
|
-
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始
|
|
29
|
-
%y 去掉世纪的年份(00 - 99)
|
|
30
|
-
%Z 时区的名字(如果不存在为空字符)
|
|
31
|
-
%% ‘%’字符
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
class BaseTime(object):
|
|
35
|
-
|
|
36
|
-
def __init__(self):
|
|
37
|
-
self.mcal = MCalendar()
|
|
38
|
-
|
|
39
|
-
def str_to_timestamp(self, time_str, time_format="%Y-%m-%d %H:%M:%S.%f"):
|
|
40
|
-
"""
|
|
41
|
-
将字符串转换为时间戳
|
|
42
|
-
:param time_str:
|
|
43
|
-
:return:
|
|
44
|
-
"""
|
|
45
|
-
timeArray = time.strptime(time_str, time_format)
|
|
46
|
-
timeStamp = int(time.mktime(timeArray))
|
|
47
|
-
return timeStamp
|
|
48
|
-
|
|
49
|
-
def date_format(self, datestring, sourceformat='%b %d, %Y', tarformat="%Y%m%d"):
|
|
50
|
-
"""
|
|
51
|
-
特定字符串转时间 转 string
|
|
52
|
-
MAY 24, 2017 ==》 20170524
|
|
53
|
-
:param datestring: 时间字符串
|
|
54
|
-
:param sourceformat: 源格式 源格式需要与传入的字符串格式一致
|
|
55
|
-
:param tarformat: 目标格式
|
|
56
|
-
:return: 一个目标格式的string
|
|
57
|
-
"""
|
|
58
|
-
"""
|
|
59
|
-
MAY 24, 2017 ==》 20170524
|
|
60
|
-
:param datestring:
|
|
61
|
-
:return:
|
|
62
|
-
"""
|
|
63
|
-
return datetime.datetime.strftime(datetime.datetime.strptime(datestring, sourceformat), tarformat)
|
|
64
|
-
|
|
65
|
-
def get_now_datetime(self):
|
|
66
|
-
"""
|
|
67
|
-
获取现在的时间
|
|
68
|
-
:return: {
|
|
69
|
-
type: datetime.datetime
|
|
70
|
-
cmd python: datetime.datetime(2019, 1, 28, 17, 19, 5, 614144)
|
|
71
|
-
print Strings: 2019-01-28 17:15:47.671929
|
|
72
|
-
}
|
|
73
|
-
"""
|
|
74
|
-
return datetime.datetime.now()
|
|
75
|
-
|
|
76
|
-
def string_to_datetime(self, str, format="%Y-%m-%d %H:%M:%S.%f") -> datetime.datetime:
|
|
77
|
-
"""
|
|
78
|
-
string 转 datetime
|
|
79
|
-
:param str: 2017-01-01 11:10:45.1234
|
|
80
|
-
:param format: 格式 必须和str的格式相对相应
|
|
81
|
-
:return:{
|
|
82
|
-
type: datetime.datetime
|
|
83
|
-
cmd python: datetime.datetime(2019, 1, 28, 17, 19, 5, 614144)
|
|
84
|
-
print Strings: 2019-01-28 17:15:47.671929
|
|
85
|
-
}
|
|
86
|
-
"""
|
|
87
|
-
return datetime.datetime.strptime(str, format)
|
|
88
|
-
|
|
89
|
-
def datetime_to_string(self, date, format="%Y.%m.%d"):
|
|
90
|
-
"""
|
|
91
|
-
:param date: 输入类型 datetime.datetime
|
|
92
|
-
:return: 2017.06.01
|
|
93
|
-
"""
|
|
94
|
-
return date.strftime(format)
|
|
95
|
-
|
|
96
|
-
def date_to_datetime(self, date):
|
|
97
|
-
"""
|
|
98
|
-
由于datetime与date不能直接比较 所以需要转换一下
|
|
99
|
-
:return:
|
|
100
|
-
"""
|
|
101
|
-
return datetime.datetime.combine(date, datetime.datetime.min.time())
|
|
102
|
-
|
|
103
|
-
def get_diff(self, datetime):
|
|
104
|
-
"""
|
|
105
|
-
传入一个时间标准的str 求差秒
|
|
106
|
-
:param datetime: {type: datetime.datetime}
|
|
107
|
-
:return: string 秒
|
|
108
|
-
"""
|
|
109
|
-
return (self.get_now_datetime() - self.string_to_datetime(datetime)).seconds
|
|
110
|
-
|
|
111
|
-
def get_time(self):
|
|
112
|
-
"""
|
|
113
|
-
返回当前时间的时间戳
|
|
114
|
-
1546914500.7278442
|
|
115
|
-
:return:
|
|
116
|
-
"""
|
|
117
|
-
return time.time()
|
|
118
|
-
|
|
119
|
-
def get_weeks_after(self, mdatetime, weeks):
|
|
120
|
-
"""
|
|
121
|
-
周
|
|
122
|
-
:param days:
|
|
123
|
-
:return: datetime
|
|
124
|
-
"""
|
|
125
|
-
return mdatetime + datetime.timedelta(weeks=weeks)
|
|
126
|
-
|
|
127
|
-
def get_weeks_before(self, mdatetime, weeks):
|
|
128
|
-
"""
|
|
129
|
-
周
|
|
130
|
-
:param days:
|
|
131
|
-
:return: datetime
|
|
132
|
-
"""
|
|
133
|
-
return mdatetime - datetime.timedelta(weeks=weeks)
|
|
134
|
-
|
|
135
|
-
def get_day_after(self, mdatetime, days):
|
|
136
|
-
"""
|
|
137
|
-
获取几天前的时间 并获取strings 可指定时间格式
|
|
138
|
-
:param days:
|
|
139
|
-
:return: datetime
|
|
140
|
-
"""
|
|
141
|
-
return mdatetime + datetime.timedelta(days=days)
|
|
142
|
-
|
|
143
|
-
def get_day_before(self, mdatetime, days):
|
|
144
|
-
"""
|
|
145
|
-
获取几天前的时间 并获取strings 可指定时间格式
|
|
146
|
-
:param days:
|
|
147
|
-
:return: datetime
|
|
148
|
-
"""
|
|
149
|
-
return mdatetime - datetime.timedelta(days=days)
|
|
150
|
-
|
|
151
|
-
def get_hours_after(self, mdatetime, hours):
|
|
152
|
-
"""
|
|
153
|
-
小时
|
|
154
|
-
:param days:
|
|
155
|
-
:return: datetime
|
|
156
|
-
"""
|
|
157
|
-
return mdatetime + datetime.timedelta(hours=hours)
|
|
158
|
-
|
|
159
|
-
def get_hours_before(self, mdatetime, hours):
|
|
160
|
-
"""
|
|
161
|
-
小时
|
|
162
|
-
:param days:
|
|
163
|
-
:return: datetime
|
|
164
|
-
"""
|
|
165
|
-
return mdatetime - datetime.timedelta(hours=hours)
|
|
166
|
-
|
|
167
|
-
def get_minutes_after(self, mdatetime, minutes):
|
|
168
|
-
"""
|
|
169
|
-
分
|
|
170
|
-
:param mdatetime: datetime
|
|
171
|
-
:param minutes: float
|
|
172
|
-
:return: datetime
|
|
173
|
-
"""
|
|
174
|
-
return mdatetime + datetime.timedelta(minutes=minutes)
|
|
175
|
-
|
|
176
|
-
def get_minutes_before(self, mdatetime, minutes):
|
|
177
|
-
"""
|
|
178
|
-
分
|
|
179
|
-
:param days:
|
|
180
|
-
:return: datetime
|
|
181
|
-
"""
|
|
182
|
-
return mdatetime - datetime.timedelta(minutes=minutes)
|
|
183
|
-
|
|
184
|
-
def get_seconds_after(self, mdatetime, seconds):
|
|
185
|
-
"""
|
|
186
|
-
秒
|
|
187
|
-
:param days:
|
|
188
|
-
:return: datetime
|
|
189
|
-
"""
|
|
190
|
-
return mdatetime + datetime.timedelta(seconds=seconds)
|
|
191
|
-
|
|
192
|
-
def get_seconds_before(self, mdatetime, seconds):
|
|
193
|
-
"""
|
|
194
|
-
秒
|
|
195
|
-
:param days:
|
|
196
|
-
:return: datetime
|
|
197
|
-
"""
|
|
198
|
-
return mdatetime - datetime.timedelta(seconds=seconds)
|
|
199
|
-
|
|
200
|
-
def get_milliseconds_after(self, mdatetime, milliseconds):
|
|
201
|
-
"""
|
|
202
|
-
毫秒
|
|
203
|
-
:param days:
|
|
204
|
-
:return: datetime
|
|
205
|
-
"""
|
|
206
|
-
return mdatetime + datetime.timedelta(milliseconds=milliseconds)
|
|
207
|
-
|
|
208
|
-
def get_milliseconds_before(self, mdatetime, milliseconds):
|
|
209
|
-
"""
|
|
210
|
-
毫秒
|
|
211
|
-
:param days:
|
|
212
|
-
:return: datetime
|
|
213
|
-
"""
|
|
214
|
-
return mdatetime - datetime.timedelta(milliseconds=milliseconds)
|
|
215
|
-
|
|
216
|
-
def get_microseconds_after(self, mdatetime, microseconds):
|
|
217
|
-
"""
|
|
218
|
-
微秒
|
|
219
|
-
:param days:
|
|
220
|
-
:return: datetime
|
|
221
|
-
"""
|
|
222
|
-
return mdatetime + datetime.timedelta(microseconds=microseconds)
|
|
223
|
-
|
|
224
|
-
def get_microseconds_before(self, mdatetime, microseconds):
|
|
225
|
-
"""
|
|
226
|
-
微秒
|
|
227
|
-
:param days:
|
|
228
|
-
:return: datetime
|
|
229
|
-
"""
|
|
230
|
-
return mdatetime - datetime.timedelta(microseconds=microseconds)
|
|
231
|
-
|
|
232
|
-
def get_next_month(self, mdatetime, day=1):
|
|
233
|
-
"""
|
|
234
|
-
获取下一月某一天
|
|
235
|
-
:param datestring: 输入格式 20170524
|
|
236
|
-
:return: 返回类型 datetime.datetime 格式 2019-01-01 00:00:00
|
|
237
|
-
"""
|
|
238
|
-
return (mdatetime.replace(day=1) + datetime.timedelta(33)).replace(day=day)
|
|
239
|
-
|
|
240
|
-
def get_befor_month(self, mdatetime, day=1):
|
|
241
|
-
"""
|
|
242
|
-
获取前一月的某一天
|
|
243
|
-
:param datestring: 输入格式 20170524
|
|
244
|
-
:return: 返回类型 datetime.datetime 格式 2019-01-01 00:00:00
|
|
245
|
-
"""
|
|
246
|
-
return (mdatetime.replace(day=1) - datetime.timedelta(10)).replace(day=day)
|
|
247
|
-
|
|
248
|
-
def get_today_date_strings(self):
|
|
249
|
-
"""
|
|
250
|
-
获取当前日期级时间字符串
|
|
251
|
-
如 20180810
|
|
252
|
-
:return: string
|
|
253
|
-
"""
|
|
254
|
-
return self.datetime_to_string(self.get_now_datetime(), '%Y%m%d')
|
|
255
|
-
|
|
256
|
-
def get_beijin_date_strins(self, format="%Y%m%d%H%M%S"):
|
|
257
|
-
"""
|
|
258
|
-
获取北京时间string
|
|
259
|
-
:return:
|
|
260
|
-
"""
|
|
261
|
-
update_time = self.datetime_to_string(
|
|
262
|
-
datetime.datetime.utcnow() + datetime.timedelta(hours=8), format)
|
|
263
|
-
return update_time
|
|
264
|
-
|
|
265
|
-
def get_moths_day(self):
|
|
266
|
-
pass
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
class MCalendar(object):
|
|
270
|
-
def __init__(self):
|
|
271
|
-
self.c = Calendar()
|
|
272
|
-
|
|
273
|
-
def monthrange(self, year: int, moths: int):
|
|
274
|
-
"""
|
|
275
|
-
获取一个月的迭代
|
|
276
|
-
:return: tuple (0,31)
|
|
277
|
-
"""
|
|
278
|
-
return monthrange(year, moths)
|
|
279
|
-
|
|
280
|
-
def itermonthdates(self, year: int, moths: int):
|
|
281
|
-
"""
|
|
282
|
-
可以迭代某個月,但前后会有其他月份的日期
|
|
283
|
-
:param year:
|
|
284
|
-
:param moths:
|
|
285
|
-
:return: generator object Calendar.itermonthdates 返回一個生成器
|
|
286
|
-
"""
|
|
287
|
-
return self.c.itermonthdates(year, moths)
|
|
288
|
-
|
|
289
|
-
def date_iter(self, year, month):
|
|
290
|
-
"""
|
|
291
|
-
返回某个月的所有天
|
|
292
|
-
for d in date_iter(2019, 12):
|
|
293
|
-
print(d)
|
|
294
|
-
:param year:
|
|
295
|
-
:param month:
|
|
296
|
-
:return:
|
|
297
|
-
"""
|
|
298
|
-
for i in range(1, monthrange(year, month)[1] + 1):
|
|
299
|
-
yield datetime.date(year, month, i)
|
|
300
|
-
|
|
301
|
-
def get_days(self, startdays: str, enddays: str):
|
|
302
|
-
"""
|
|
303
|
-
返回开始到结束的所有天
|
|
304
|
-
:param startdays: 20180101
|
|
305
|
-
:param enddays: 20190101
|
|
306
|
-
:return:
|
|
307
|
-
"""
|
|
308
|
-
start_year = startdays[:4]
|
|
309
|
-
start_month = startdays[4:6]
|
|
310
|
-
start_days = startdays[6:]
|
|
311
|
-
end_year = enddays[:4]
|
|
312
|
-
end_month = enddays[4:6]
|
|
313
|
-
end_days = enddays[6:]
|
|
314
|
-
|
|
315
|
-
for year in range(int(start_year), int(end_year) + 1):
|
|
316
|
-
for month in range(int(start_month), 13):
|
|
317
|
-
start_month = 1
|
|
318
|
-
for days in self.date_iter(int(year), int(month)):
|
|
319
|
-
if startdays <= str(days).replace("-", "") <= enddays:
|
|
320
|
-
yield days
|
|
1
|
+
import datetime
|
|
2
|
+
import time
|
|
3
|
+
from calendar import monthrange, Calendar
|
|
4
|
+
# timedalte 是datetime中的一个对象,该对象表示两个时间的差值
|
|
5
|
+
from datetime import timedelta
|
|
6
|
+
|
|
7
|
+
# microseconds (毫秒) 1 second = 1000 milliseconds
|
|
8
|
+
# milliseconds (微秒) 1 milliseconds = 1000 milliseconds
|
|
9
|
+
"""
|
|
10
|
+
%Y 完整的年份
|
|
11
|
+
%m 月份(01 - 12)
|
|
12
|
+
%d 一个月中的第几天(01 - 31)
|
|
13
|
+
%H 一天中的第几个小时(24小时制,00 - 23)
|
|
14
|
+
%M 分钟数(00 - 59)
|
|
15
|
+
%S 秒(01 - 61)
|
|
16
|
+
%X 本地相应时间
|
|
17
|
+
%x 本地相应日期
|
|
18
|
+
%a 本地(locale)简化星期名称
|
|
19
|
+
%A 本地完整星期名称
|
|
20
|
+
%b 本地简化月份名称
|
|
21
|
+
%B 本地完整月份名称
|
|
22
|
+
%c 本地相应的日期和时间表示
|
|
23
|
+
%I 第几个小时(12小时制,01 - 12)
|
|
24
|
+
%j 一年中的第几天(001 - 366)
|
|
25
|
+
%p 本地am或者pm的相应符
|
|
26
|
+
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)
|
|
27
|
+
%w 一个星期中的第几天(0 - 6,0是星期天)
|
|
28
|
+
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始
|
|
29
|
+
%y 去掉世纪的年份(00 - 99)
|
|
30
|
+
%Z 时区的名字(如果不存在为空字符)
|
|
31
|
+
%% ‘%’字符
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
class BaseTime(object):
|
|
35
|
+
|
|
36
|
+
def __init__(self):
|
|
37
|
+
self.mcal = MCalendar()
|
|
38
|
+
|
|
39
|
+
def str_to_timestamp(self, time_str, time_format="%Y-%m-%d %H:%M:%S.%f"):
|
|
40
|
+
"""
|
|
41
|
+
将字符串转换为时间戳
|
|
42
|
+
:param time_str:
|
|
43
|
+
:return:
|
|
44
|
+
"""
|
|
45
|
+
timeArray = time.strptime(time_str, time_format)
|
|
46
|
+
timeStamp = int(time.mktime(timeArray))
|
|
47
|
+
return timeStamp
|
|
48
|
+
|
|
49
|
+
def date_format(self, datestring, sourceformat='%b %d, %Y', tarformat="%Y%m%d"):
|
|
50
|
+
"""
|
|
51
|
+
特定字符串转时间 转 string
|
|
52
|
+
MAY 24, 2017 ==》 20170524
|
|
53
|
+
:param datestring: 时间字符串
|
|
54
|
+
:param sourceformat: 源格式 源格式需要与传入的字符串格式一致
|
|
55
|
+
:param tarformat: 目标格式
|
|
56
|
+
:return: 一个目标格式的string
|
|
57
|
+
"""
|
|
58
|
+
"""
|
|
59
|
+
MAY 24, 2017 ==》 20170524
|
|
60
|
+
:param datestring:
|
|
61
|
+
:return:
|
|
62
|
+
"""
|
|
63
|
+
return datetime.datetime.strftime(datetime.datetime.strptime(datestring, sourceformat), tarformat)
|
|
64
|
+
|
|
65
|
+
def get_now_datetime(self):
|
|
66
|
+
"""
|
|
67
|
+
获取现在的时间
|
|
68
|
+
:return: {
|
|
69
|
+
type: datetime.datetime
|
|
70
|
+
cmd python: datetime.datetime(2019, 1, 28, 17, 19, 5, 614144)
|
|
71
|
+
print Strings: 2019-01-28 17:15:47.671929
|
|
72
|
+
}
|
|
73
|
+
"""
|
|
74
|
+
return datetime.datetime.now()
|
|
75
|
+
|
|
76
|
+
def string_to_datetime(self, str, format="%Y-%m-%d %H:%M:%S.%f") -> datetime.datetime:
|
|
77
|
+
"""
|
|
78
|
+
string 转 datetime
|
|
79
|
+
:param str: 2017-01-01 11:10:45.1234
|
|
80
|
+
:param format: 格式 必须和str的格式相对相应
|
|
81
|
+
:return:{
|
|
82
|
+
type: datetime.datetime
|
|
83
|
+
cmd python: datetime.datetime(2019, 1, 28, 17, 19, 5, 614144)
|
|
84
|
+
print Strings: 2019-01-28 17:15:47.671929
|
|
85
|
+
}
|
|
86
|
+
"""
|
|
87
|
+
return datetime.datetime.strptime(str, format)
|
|
88
|
+
|
|
89
|
+
def datetime_to_string(self, date, format="%Y.%m.%d"):
|
|
90
|
+
"""
|
|
91
|
+
:param date: 输入类型 datetime.datetime
|
|
92
|
+
:return: 2017.06.01
|
|
93
|
+
"""
|
|
94
|
+
return date.strftime(format)
|
|
95
|
+
|
|
96
|
+
def date_to_datetime(self, date):
|
|
97
|
+
"""
|
|
98
|
+
由于datetime与date不能直接比较 所以需要转换一下
|
|
99
|
+
:return:
|
|
100
|
+
"""
|
|
101
|
+
return datetime.datetime.combine(date, datetime.datetime.min.time())
|
|
102
|
+
|
|
103
|
+
def get_diff(self, datetime):
|
|
104
|
+
"""
|
|
105
|
+
传入一个时间标准的str 求差秒
|
|
106
|
+
:param datetime: {type: datetime.datetime}
|
|
107
|
+
:return: string 秒
|
|
108
|
+
"""
|
|
109
|
+
return (self.get_now_datetime() - self.string_to_datetime(datetime)).seconds
|
|
110
|
+
|
|
111
|
+
def get_time(self):
|
|
112
|
+
"""
|
|
113
|
+
返回当前时间的时间戳
|
|
114
|
+
1546914500.7278442
|
|
115
|
+
:return:
|
|
116
|
+
"""
|
|
117
|
+
return time.time()
|
|
118
|
+
|
|
119
|
+
def get_weeks_after(self, mdatetime, weeks):
|
|
120
|
+
"""
|
|
121
|
+
周
|
|
122
|
+
:param days:
|
|
123
|
+
:return: datetime
|
|
124
|
+
"""
|
|
125
|
+
return mdatetime + datetime.timedelta(weeks=weeks)
|
|
126
|
+
|
|
127
|
+
def get_weeks_before(self, mdatetime, weeks):
|
|
128
|
+
"""
|
|
129
|
+
周
|
|
130
|
+
:param days:
|
|
131
|
+
:return: datetime
|
|
132
|
+
"""
|
|
133
|
+
return mdatetime - datetime.timedelta(weeks=weeks)
|
|
134
|
+
|
|
135
|
+
def get_day_after(self, mdatetime, days):
|
|
136
|
+
"""
|
|
137
|
+
获取几天前的时间 并获取strings 可指定时间格式
|
|
138
|
+
:param days:
|
|
139
|
+
:return: datetime
|
|
140
|
+
"""
|
|
141
|
+
return mdatetime + datetime.timedelta(days=days)
|
|
142
|
+
|
|
143
|
+
def get_day_before(self, mdatetime, days):
|
|
144
|
+
"""
|
|
145
|
+
获取几天前的时间 并获取strings 可指定时间格式
|
|
146
|
+
:param days:
|
|
147
|
+
:return: datetime
|
|
148
|
+
"""
|
|
149
|
+
return mdatetime - datetime.timedelta(days=days)
|
|
150
|
+
|
|
151
|
+
def get_hours_after(self, mdatetime, hours):
|
|
152
|
+
"""
|
|
153
|
+
小时
|
|
154
|
+
:param days:
|
|
155
|
+
:return: datetime
|
|
156
|
+
"""
|
|
157
|
+
return mdatetime + datetime.timedelta(hours=hours)
|
|
158
|
+
|
|
159
|
+
def get_hours_before(self, mdatetime, hours):
|
|
160
|
+
"""
|
|
161
|
+
小时
|
|
162
|
+
:param days:
|
|
163
|
+
:return: datetime
|
|
164
|
+
"""
|
|
165
|
+
return mdatetime - datetime.timedelta(hours=hours)
|
|
166
|
+
|
|
167
|
+
def get_minutes_after(self, mdatetime, minutes):
|
|
168
|
+
"""
|
|
169
|
+
分
|
|
170
|
+
:param mdatetime: datetime
|
|
171
|
+
:param minutes: float
|
|
172
|
+
:return: datetime
|
|
173
|
+
"""
|
|
174
|
+
return mdatetime + datetime.timedelta(minutes=minutes)
|
|
175
|
+
|
|
176
|
+
def get_minutes_before(self, mdatetime, minutes):
|
|
177
|
+
"""
|
|
178
|
+
分
|
|
179
|
+
:param days:
|
|
180
|
+
:return: datetime
|
|
181
|
+
"""
|
|
182
|
+
return mdatetime - datetime.timedelta(minutes=minutes)
|
|
183
|
+
|
|
184
|
+
def get_seconds_after(self, mdatetime, seconds):
|
|
185
|
+
"""
|
|
186
|
+
秒
|
|
187
|
+
:param days:
|
|
188
|
+
:return: datetime
|
|
189
|
+
"""
|
|
190
|
+
return mdatetime + datetime.timedelta(seconds=seconds)
|
|
191
|
+
|
|
192
|
+
def get_seconds_before(self, mdatetime, seconds):
|
|
193
|
+
"""
|
|
194
|
+
秒
|
|
195
|
+
:param days:
|
|
196
|
+
:return: datetime
|
|
197
|
+
"""
|
|
198
|
+
return mdatetime - datetime.timedelta(seconds=seconds)
|
|
199
|
+
|
|
200
|
+
def get_milliseconds_after(self, mdatetime, milliseconds):
|
|
201
|
+
"""
|
|
202
|
+
毫秒
|
|
203
|
+
:param days:
|
|
204
|
+
:return: datetime
|
|
205
|
+
"""
|
|
206
|
+
return mdatetime + datetime.timedelta(milliseconds=milliseconds)
|
|
207
|
+
|
|
208
|
+
def get_milliseconds_before(self, mdatetime, milliseconds):
|
|
209
|
+
"""
|
|
210
|
+
毫秒
|
|
211
|
+
:param days:
|
|
212
|
+
:return: datetime
|
|
213
|
+
"""
|
|
214
|
+
return mdatetime - datetime.timedelta(milliseconds=milliseconds)
|
|
215
|
+
|
|
216
|
+
def get_microseconds_after(self, mdatetime, microseconds):
|
|
217
|
+
"""
|
|
218
|
+
微秒
|
|
219
|
+
:param days:
|
|
220
|
+
:return: datetime
|
|
221
|
+
"""
|
|
222
|
+
return mdatetime + datetime.timedelta(microseconds=microseconds)
|
|
223
|
+
|
|
224
|
+
def get_microseconds_before(self, mdatetime, microseconds):
|
|
225
|
+
"""
|
|
226
|
+
微秒
|
|
227
|
+
:param days:
|
|
228
|
+
:return: datetime
|
|
229
|
+
"""
|
|
230
|
+
return mdatetime - datetime.timedelta(microseconds=microseconds)
|
|
231
|
+
|
|
232
|
+
def get_next_month(self, mdatetime, day=1):
|
|
233
|
+
"""
|
|
234
|
+
获取下一月某一天
|
|
235
|
+
:param datestring: 输入格式 20170524
|
|
236
|
+
:return: 返回类型 datetime.datetime 格式 2019-01-01 00:00:00
|
|
237
|
+
"""
|
|
238
|
+
return (mdatetime.replace(day=1) + datetime.timedelta(33)).replace(day=day)
|
|
239
|
+
|
|
240
|
+
def get_befor_month(self, mdatetime, day=1):
|
|
241
|
+
"""
|
|
242
|
+
获取前一月的某一天
|
|
243
|
+
:param datestring: 输入格式 20170524
|
|
244
|
+
:return: 返回类型 datetime.datetime 格式 2019-01-01 00:00:00
|
|
245
|
+
"""
|
|
246
|
+
return (mdatetime.replace(day=1) - datetime.timedelta(10)).replace(day=day)
|
|
247
|
+
|
|
248
|
+
def get_today_date_strings(self):
|
|
249
|
+
"""
|
|
250
|
+
获取当前日期级时间字符串
|
|
251
|
+
如 20180810
|
|
252
|
+
:return: string
|
|
253
|
+
"""
|
|
254
|
+
return self.datetime_to_string(self.get_now_datetime(), '%Y%m%d')
|
|
255
|
+
|
|
256
|
+
def get_beijin_date_strins(self, format="%Y%m%d%H%M%S"):
|
|
257
|
+
"""
|
|
258
|
+
获取北京时间string
|
|
259
|
+
:return:
|
|
260
|
+
"""
|
|
261
|
+
update_time = self.datetime_to_string(
|
|
262
|
+
datetime.datetime.utcnow() + datetime.timedelta(hours=8), format)
|
|
263
|
+
return update_time
|
|
264
|
+
|
|
265
|
+
def get_moths_day(self):
|
|
266
|
+
pass
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
class MCalendar(object):
|
|
270
|
+
def __init__(self):
|
|
271
|
+
self.c = Calendar()
|
|
272
|
+
|
|
273
|
+
def monthrange(self, year: int, moths: int):
|
|
274
|
+
"""
|
|
275
|
+
获取一个月的迭代
|
|
276
|
+
:return: tuple (0,31)
|
|
277
|
+
"""
|
|
278
|
+
return monthrange(year, moths)
|
|
279
|
+
|
|
280
|
+
def itermonthdates(self, year: int, moths: int):
|
|
281
|
+
"""
|
|
282
|
+
可以迭代某個月,但前后会有其他月份的日期
|
|
283
|
+
:param year:
|
|
284
|
+
:param moths:
|
|
285
|
+
:return: generator object Calendar.itermonthdates 返回一個生成器
|
|
286
|
+
"""
|
|
287
|
+
return self.c.itermonthdates(year, moths)
|
|
288
|
+
|
|
289
|
+
def date_iter(self, year, month):
|
|
290
|
+
"""
|
|
291
|
+
返回某个月的所有天
|
|
292
|
+
for d in date_iter(2019, 12):
|
|
293
|
+
print(d)
|
|
294
|
+
:param year:
|
|
295
|
+
:param month:
|
|
296
|
+
:return:
|
|
297
|
+
"""
|
|
298
|
+
for i in range(1, monthrange(year, month)[1] + 1):
|
|
299
|
+
yield datetime.date(year, month, i)
|
|
300
|
+
|
|
301
|
+
def get_days(self, startdays: str, enddays: str):
|
|
302
|
+
"""
|
|
303
|
+
返回开始到结束的所有天
|
|
304
|
+
:param startdays: 20180101
|
|
305
|
+
:param enddays: 20190101
|
|
306
|
+
:return:
|
|
307
|
+
"""
|
|
308
|
+
start_year = startdays[:4]
|
|
309
|
+
start_month = startdays[4:6]
|
|
310
|
+
start_days = startdays[6:]
|
|
311
|
+
end_year = enddays[:4]
|
|
312
|
+
end_month = enddays[4:6]
|
|
313
|
+
end_days = enddays[6:]
|
|
314
|
+
|
|
315
|
+
for year in range(int(start_year), int(end_year) + 1):
|
|
316
|
+
for month in range(int(start_month), 13):
|
|
317
|
+
start_month = 1
|
|
318
|
+
for days in self.date_iter(int(year), int(month)):
|
|
319
|
+
if startdays <= str(days).replace("-", "") <= enddays:
|
|
320
|
+
yield days
|