time模块部分时间函数分享

time模块

time模块对时间的表示方式:

  • 时间戳: 1970-1-1 0:0:0到某一时间点之间的秒数
  • UTC时间: 世界协调时,以英国格林威治所在的纵切面为标准时区,每隔15°角是一个时区,共24个时区.
  • 9元组: (年,月,日,时,分,秒,一周中的第几天,一年中的第几天,是否为夏时制)
>>> import time

# 返回当前时间的9元组
>>> t = time.localtime()
>>> t
time.struct_time(tm_year=2019, tm_mon=11, tm_mday=7, tm_hour=17, tm_min=14, tm_sec=25, tm_wday=3, tm_yday=311, tm_isdst=0)

# 返回格林威治0时区当前时间的9元组
>>> time.gmtime()
time.struct_time(tm_year=2019, tm_mon=11, tm_mday=7, tm_hour=9, tm_min=15, tm_sec=10, tm_wday=3, tm_yday=311, tm_isdst=0)

# 常用,与1970-1-1 8:00之间的秒数,时间戳
>>> time.time()
1573118128.4677835

# 把9元组时间转成时间戳
>>> time.mktime(t)
1573118065.0

# 延迟1s
>>> time.sleep(1)

# 如果有参数就是9元组形式
>>> time.asctime()
'Thu Nov  7 17:20:51 2019'

# 返回当前时间,参数是时间戳,常用 
>>> time.ctime()
'Thu Nov  7 17:20:58 2019'

# 常用 讲当前时间转化成指定的时间格式化
>>> time.strftime('%Y-%m-%d')
'2019-11-07'
>>> time.strftime('%Y-%m-%d %a %H:%M:%S')
'2019-11-08 Fri 09:30:34'

# 将指定时间转换成9元组时间格式
>>> time.strptime('2018-03-12','%Y-%m-%d')
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=12, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=71, tm_isdst=-1)

# 返回当前时间的datetime对象
>>> datetime.today()
datetime.datetime(2019, 11, 7, 17, 51, 42, 734337)
>>> datetime.now()  # 同上,可用作时区参考
datetime.datetime(2019, 11, 7, 17, 51, 53, 174259)

# 返回datetime对象
>>> datetime.strptime('2018/06/12','%Y/%m/%d')
datetime.datetime(2018, 6, 12, 0, 0)
>>> dt = datetime.today()
>>> dt
datetime.datetime(2019, 11, 7, 17, 28, 25, 68553)

>>> datetime.ctime(dt)
'Thu Nov  7 17:28:25 2019'

>>> datetime.strftime(dt,'%Y%m%d')
'20191107'

# 时间的操作,计算时间差
>>> days = timedelta(days=90,hours=3)
>>> days
datetime.timedelta(90, 10800)
>>> dt2 = datetime.now()
>>> dt2 = dt + days
>>> dt2
datetime.datetime(2020, 2, 5, 20, 28, 25, 68553)
>>> dt2.year
2020
>>> dt2.month
2
>>> dt2.day
5
>>> dt2.hour
20

案例

在类似日志的文件取出固定时间段内的信息

[student@room9pc01 test]$ cat my.log 
2019-05-15 08:10:01 aaaa
2019-05-15 08:32:00 bbbb
2019-05-15 09:01:02 cccc
2019-05-15 09:28:23 dddd
2019-05-15 10:42:58 eeee
2019-05-15 11:08:00 ffff
2019-05-15 12:35:03 gggg
2019-05-15 13:13:24 hhhh

现在我们要取出9;00~12:00之内的数据
每行的前19个字符表示的是该信息对应的时间,那么我们需要提取改时间,判断是否在时间范围内即可

import time
#创建指定的时间端 
t9 = time.strptime('2019-5-15 09:00:00','%Y-%m-%d %H:%M:%S')
t12 = time.strptime('2019-5-15 12:00:00','%Y-%m-%d %H:%M:%S')

# with open('/tmp/test/my.log','r') as fobj:
#     for line in fobj:  
#         t = time.strptime(line[:19],'%Y-%m-%d %H:%M:%S')
#         if t9 <= t <= t12:  # 会将文件遍历完,会增加不必要的时间消耗
#             print(line,end='')
with open('/tmp/test/my.log','r') as fobj:
    for line in fobj:
      	# 读取文件中的每行的时间信息,并将时间格式转成9元组形式
        t = time.strptime(line[:19],'%Y-%m-%d %H:%M:%S')
        if t > t12:
        # 按时间记录的情况,如果时间已经大于了,那么后面的时间也必定会大于时间段,那么就没必要再去读取,节省程序运行时间
            break
        if t > t9:
            print(line,end='')
from  _datetime import datetime,timedelta

t9 = datetime.strptime('2019-5-15 09:00:00','%Y-%m-%d %H:%M:%S')
h = timedelta(hours = 2)

with open('/tmp/test/my.log','r') as fobj:
    for line in fobj:
        t = datetime.strptime(line[:19],'%Y-%m-%d %H:%M:%S')
        if t > (t9 + h):
            break
        if t > t9:
            print(line,end='')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值