python 时间库小结(time & datetime)

导入库

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模块常用的主要有下面这四个类:

  1. datetime.date: 是指年月日构成的日期(年、月、日)
  2. datetime.time: 是指时分秒微秒构成的一天24小时中的具体时间(时、分、秒)
  3. datetime.datetime: 上面两个合在一起,既包含时间又包含日期(年、月、日、时、分、秒)
  4. 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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值