python具有良好的时间和日期管理功能,主要涉及time和datetime两个模块。time包基于C语言的库函数(library functions)。datetime包是基于time包的一个高级包, 为我们提供了多一层的便利。
一、time模块
实际上,计算机只会维护一个挂钟时间(wall clock time),这个时间是从某个固定时间起点到现在的时间间隔。时间起点的选择与计算机相关,但一台计算机的话,这一时间起点是固定的。其它的日期信息都是从这一时间计算得到的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import time
print(time.clock()) print(time.time())
time.sleep(3)
print(time.time())
st = time.gmtime() st = time.localtime()
s = time.mktime(st) print(s)
|
二、datetime模块
datetime可以理解为date和time两个组成部分。date是指年月日构成的日期(相当于日历),time是指时分秒微秒构成的一天24小时中的具体时间(相当于手表)。你可以将这两个分开管理(datetime.date类,datetime.time类),也可以将两者合在一起(datetime.datetime类)。
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
| import datetime
print(datetime.datetime.today())
print(datetime.datetime.now())
print(datetime.datetime.utcnow())
print(datetime.datetime.fromtimestamp) print(datetime.datetime.fromtimestamp(int(1559225186)))
print(datetime.datetime.now().timestamp())
print(datetime.datetime(2018, 9, 17, 10, 30, 43, 79043))
print(datetime.datetime.now().weekday())
print(datetime.datetime.now().isoweekday())
print(datetime.datetime.now().date())
print(datetime.datetime.now().time())
print(datetime.datetime.now()) print(datetime.datetime.now().replace(2018,6,18))
print(datetime.datetime.now()) print(datetime.datetime.now().isocalendar())
|
截取日期时间段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import datetime
def create_assist_date(datestart=None, dateend=None):
if datestart is None: datestart = '2016-01-01' if dateend is None: dateend = datetime.datetime.now().strftime('%Y-%m-%d')
datestart=datetime.datetime.strptime(datestart,'%Y-%m-%d') dateend=datetime.datetime.strptime(dateend,'%Y-%m-%d') date_list = [] date_list.append(datestart.strftime('%Y-%m-%d')) while datestart<dateend: datestart+=datetime.timedelta(days=+1) date_list.append(datestart.strftime('%Y-%m-%d')) return date_list
d_list = create_assist_date(datestart='2021-12-27', dateend='2022-01-15') print(d_list)
|
此前的第n天
1 2
| def get_history_day(n): return str(datetime.datetime.now() - datetime.timedelta(days=n))[:10]
|
下月月初
1 2 3 4 5 6 7 8 9 10 11 12
| def get_begin_of_next_month(): today = datetime.date.today() year = today.year month = today.month if month == 12: year += 1 month = 1 else: month += 1 begin_of_next_month = str(datetime.date(year, month, 1)).replace('-','') return begin_of_next_month
|
三、时间转换
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
| import time,datetime
def get_now_str(): ''' 获得字符串格式的当前时间 ''' t = datetime.datetime.now() strtime = t.strftime('%Y-%m-%d %H:%M:%S') return strtime
def get_now_timedelta(): ''' 获得时间戳格式的当前时间 ''' t = datetime.datetime.now() timedelta = time.mktime(t.timetuple()) return timedelta
def datetime_to_str(date_time): ''' 标准日期转为文本日期 INPUT -> 标准日期 OUTPUT -> 文本日期 ''' strtime = date_time.strftime('%Y-%m-%d %H:%M:%S') return strtime
def str_to_datetime(str_time): ''' 文本日期转为标准日期 INPUT -> 文本日期 OUTPUT -> 标准日期 ''' date_time = datetime.datetime.strptime(str_time, '%Y-%m-%d %H:%M:%S') return date_time
def str_to_timedelta(str_time): ''' 字符串格式时间转为时间戳格式时间 INPUT -> 字符串格式时间 OUTPUT -> 时间戳格式时间 ''' t = time.strptime(str_time,'%Y-%m-%d %H:%M:%S') timedelta = time.mktime(t) return timedelta
def timedelta_to_str(timedelta): ''' 时间戳转为文本日期 INPUT -> 时间戳 OUTPUT -> 文本日期 ''' t = time.localtime(timedelta) str_time = time.strftime('%Y-%m-%d %H:%M:%S', t) return str_time
def timedelta_to_datetime(timedelta): ''' 时间戳转为标准日期 INPUT -> 时间戳 OUTPUT -> 标准日期 ''' date_time = datetime.datetime.fromtimestamp(timedelta) return date_time
def datetime_to_timedelta(date_time): ''' 标准日期转为时间戳 INPUT -> 标准日期 OUTPUT -> 时间戳 ''' timedelta = time.mktime(date_time.timetuple()) return timedelta
def time_migration(str_time, dd, hh, mm): ''' 时间偏移 INPUT -> 文本日期, 天的偏移, 小时的偏移, 分钟的偏移 OUTPUT -> 偏移后的文本日期 ''' date_time = str_to_datetime(str_time) date_time = date_time + datetime.timedelta(days=dd) date_time = date_time + datetime.timedelta(hour=hh) date_time = date_time + datetime.timedelta(hour=mm) str_time = date_time.strftime("%Y-%m-%d %H:%M:%S") return str_time
def time_migration_days(str_time, dd, hh): ''' 固定时间的日期偏移 INPUT -> 文本日期, 天的偏移, 固定小时 OUTPUT -> 偏移后的文本日期 ''' date_time = str_to_datetime(str_time) date_time = date_time + datetime.timedelta(days=dd) str_time = date_time.replace(hour=hh, minute=00, second=00).strftime("%Y-%m-%d %H:%M:%S") return str_time
|