导入库
import time
import datetime
time
1、使用time,获取当前时间的时间戳
In [42]: time.time()
Out[42]: 1532874802.0235758
# 将时间字符串转为时间元组 struct_time
In [131]: time.strptime('2017-09-09 10:59:59', '%Y-%m-%d %H:%M:%S')
Out[131]: time.struct_time(tm_year=2017, tm_mon=9, tm_mday=9, tm_hour=10, tm_min=59, tm_sec=59, tm_wday=5, tm_yday=252, tm_isdst=-1)
# 将指定时间转为时间戳
In [132]: time.mktime(time.strptime('2017-09-09 10:59:59', '%Y-%m-%d %H:%M:%S'))
Out[132]: 1504925999.0
2、将时间戳转为当前时区的时间元组 struct_time
In [43]: time.localtime(time.time())
Out[43]: time.struct_time(tm_year=2018, tm_mon=7, tm_mday=29, tm_hour=22, tm_min=29, tm_sec=31, tm_wday=6, tm_yday=210, tm_isdst=0)
In [68]: time.localtime()
Out[68]: time.struct_time(tm_year=2018, tm_mon=7, tm_mday=29, tm_hour=23, tm_min=4, tm_sec=38, tm_wday=6, tm_yday=210, tm_isdst=0)
3、时间字符串转时间元组
In [46]: time.strptime('2018-07-29 23:03:36','%Y-%m-%d %H:%M:%S')
Out[46]: time.struct_time(tm_year=2018, tm_mon=7, tm_mday=29, tm_hour=23, tm_min=3, tm_sec=36, tm_wday=6, tm_yday=210, tm_isdst=-1)
4、将时间格式化输出
# 无时间参数时,将默认取当前时间
In [47]: time.strftime('%Y-%m-%d %H:%M:%S')
Out[47]: '2018-07-29 22:40:05'
In [48]: time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
Out[48]: '2018-07-29 22:40:16'
5、计算时间差
import time
from functools import wraps
def calc_time(func, *args, **kwargs):
@wraps(func)
def new_func(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print('Cost time: {} S'.format(end-start))
return result
return new_func
@calc_time
def test(a, b, c=10, d=20):
time.sleep(3)
result = a + b + c + d
return result
输出如下:
In [66]: test(2,3)
Cost time: 3.0000922679901123 S
Out[66]: 35
In [67]: test(2,3, 200, 300)
Cost time: 3.000565528869629 S
Out[67]: 505
datetime
1、使用datetime,获取当前时间元组 struct_time
In [69]: datetime.datetime.now()
Out[69]: datetime.datetime(2018, 7, 29, 22, 56, 20, 352224)
2、转化为时间戳
In [70]: datetime.datetime.now().timetuple()
Out[70]: time.struct_time(tm_year=2018, tm_mon=7, tm_mday=29, tm_hour=22, tm_min=58, tm_sec=22, tm_wday=6, tm_yday=210, tm_isdst=-1)
In [71]: time.mktime(datetime.datetime.now().timetuple())
Out[71]: 1532876354.0
3、时间戳转datetime格式的元组
In [73]: time.time()
Out[73]: 1532876450.4447942
In [74]: datetime.datetime.fromtimestamp(time.time())
Out[74]: datetime.datetime(2018, 7, 29, 23, 0, 52, 557232)
4、datetime格式化输出
In [88]: datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S")
Out[88]: '2018-07-29 23:09:22'
5、时间字符串转时间元组
In [89]: datetime.datetime.strptime('2018-07-29 23:09:22', "%Y-%m-%d %H:%M:%S")
Out[89]: datetime.datetime(2018, 7, 29, 23, 9, 22)
6、计算时间、日期差
In [91]: d1 = datetime.datetime.strptime('2018-07-29 23:09:22', "%Y-%m-%d %H:%M:%S")
In [92]: d1
Out[92]: datetime.datetime(2018, 7, 29, 23, 9, 22)
In [93]: d2 = datetime.datetime.strptime('2018-08-29 23:09:22', "%Y-%m-%d %H:%M:%S")
In [94]: d2
Out[94]: datetime.datetime(2018, 8, 29, 23, 9, 22)
In [96]: (d2 - d1).days
Out[96]: 31
7、使用datetime.timedelta进行时间的加减法
In [110]: d1
Out[110]: datetime.datetime(2018, 7, 29, 23, 9, 22)
In [111]: d1 + datetime.timedelta(days=10)
Out[111]: datetime.datetime(2018, 8, 8, 23, 9, 22)
In [99]: d1.year
Out[99]: 2018
In [100]: d1.day
Out[100]: 29
In [101]: d1.month
Out[101]: 7
In [102]: d1.year
Out[102]: 2018
In [103]: d1.month
Out[103]: 7
In [104]: d1.day
Out[104]: 29
In [105]: d1.hour
Out[105]: 23
In [106]: d1.minute
Out[106]: 9
In [107]: d1.second
Out[107]: 22
In [109]: d1.microsecond
Out[109]: 0
补充:
datetime模块常用的主要有下面这四个类:
- datetime.date: 是指年月日构成的日期(年、月、日)
- datetime.time: 是指时分秒微秒构成的一天24小时中的具体时间(时、分、秒)
- datetime.datetime: 上面两个合在一起,既包含时间又包含日期(年、月、日、时、分、秒)
- datetime.timedelta: 时间间隔对象(timedelta)。一个时间点(datetime)加上一个时间间隔(timedelta)可以得到一个新的时间点(datetime)。比如今天的上午3点加上5个小时得到今天的上午8点。同理,两个时间点相减会得到一个时间间隔。
# 获取当天日期
In [112]: datetime.date.today()
Out[112]: datetime.date(2018, 7, 29)
# 格式化当天日期
In [114]: datetime.date.strftime(datetime.date.today(),'%Y-%m-%d')
Out[114]: '2018-07-29'
# 将当天日期转为时间元组
In [117]: datetime.date.timetuple(datetime.date.today())
Out[117]: time.struct_time(tm_year=2018, tm_mon=7, tm_mday=29, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=210, tm_isdst=-1)
# 替换日期或时间
In [118]: datetime.datetime.replace(datetime.datetime.now(), year=2017)
Out[118]: datetime.datetime(2017, 7, 29, 23, 29, 6, 714285)
In [119]: datetime.date.replace(datetime.date.today(), year=2017)
Out[119]: datetime.date(2017, 7, 29)
# 时间戳转日期
In [120]: datetime.date.fromtimestamp(time.time())
Out[120]: datetime.date(2018, 7, 29)
创建规则
In [121]: datetime.date?
Init signature: datetime.date(self, /, *args, **kwargs)
Docstring: date(year, month, day) --> date object
File: d:\programdata\anaconda3\lib\datetime.py
Type: type
In [122]: datetime.time?
Init signature: datetime.time(self, /, *args, **kwargs)
Docstring:
time([hour[, minute[, second[, microsecond[, tzinfo]]]]]) --> a time object
All arguments are optional. tzinfo may be None, or an instance of
a tzinfo subclass. The remaining arguments may be ints.
File: d:\programdata\anaconda3\lib\datetime.py
Type: type
In [123]: datetime.datetime?
Init signature: datetime.datetime(self, /, *args, **kwargs)
Docstring:
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
The year, month and day arguments are required. tzinfo may be None, or an
instance of a tzinfo subclass. The remaining arguments may be ints.
File: d:\programdata\anaconda3\lib\datetime.py
Type: type
In [124]: datetime.timedelta?
Init signature: datetime.timedelta(self, /, *args, **kwargs)
Docstring: Difference between two datetime values.
File: d:\programdata\anaconda3\lib\datetime.py
Type: type