python笔记-常用时间模块

time模块

time模块简介

time模块--时间获取和转换
time模块提供各种时间相关的功能
与时间相关的模块有:time,datetime,calendar
这个模块中定义的大部分函数是调用C平台上的同名函数实现

术语和约定的解释:

时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日开始按秒计算的偏移量(time.gmtime(0))此模块中的函数无法处理1970纪元年以前的时间或太遥远的未来(处理极限取决于C函数库,对于32位系统而言,是2038年)
UTC(Coordinated Universal Time,世界协调时)也叫格林威治天文时间,是世界标准时间.在我国为UTC+8
DST(Daylight Saving Time)即夏令时
时间元组(time.struct_time对象, time.localtime方法)
字符串时间(time.ctime)

案例

利用time.time()方法,我们可以计算两个时间点之间的间隔,
但是有些时候我们想要得到/etc/group文件的最后一次修改时间,
对应的年月日这些信息,并保存在文件date.txt文件中。


 import os
 import time

 time1 = os.path.getctime('/etc/group')
 tuple_time = time.localtime(time1)

 year = tuple_time.tm_year
 month = tuple_time.tm_mon
 day = tuple_time.tm_mday

 with open('date.txt', 'w') as f:
     f.write("%d %d %d" %(year, month, day))



# 常用的时间转换
## 把看不懂的时间戳转换为字符串格式

import time
atime = time.time()
print(atime)
ctime = time.ctime(atime)
print(ctime)

# 把看不懂的时间戳转换为元组格式

import time
atime = time.time()
print(atime)
ctime = time.localtime(atime)
print(ctime)

# 把元组的时间转换为时间戳

import time
tuple_time = time.localtime()
print(time.mktime(tuple_time))

# 把元组的时间转换字符串格式

import  time
print(time.strftime('%m-%d'))
print(time.strftime('%Y-%m-%d'))
print(time.strftime('%T'))
print(time.strftime('%F'))

# 字符串格式转换为元组

import time
s = '2018-10-10'
print(time.strptime(s, '%Y-%m-%d'))
s_time = '12:12:30'
print(time.strptime(s_time, '%H:%M:%S'))

datatime模块

datatime模块介绍

datetime模块有自己的datetime数据类型,datetime值表示一个特定的时刻。
-datetime模块定义了下面这几个类:
-datetime.date:表示日期的类。常用的属性有year, month, day;
-datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
-datetime.datetime:表示日期时间。
-datetime.timedelta:表示时间间隔,即两个时间点之间的长度。

from datetime import  date
from datetime import  time
from datetime import  datetime
from datetime import  timedelta
# 获取当前的日期并且以字符串方式返回2018-09-08;
print(date.today())
# 对象加或者减一个时间间隔, 返回一个新的日期对象;
 d = date.today()
 print(d)
 delta = timedelta(days=3)
 print(d - delta)



# 需求: 获取2个小时之前的时间
d = datetime.now()
print(d)
delta = timedelta(hours=2)
print(d - delta)

应用案例_系统监控

需求:
1. 获取当前主机信息, 包含操作系统名, 主机名, 内核版本, 硬件架构等
2. 获取开机时间和开机时长;
3. 获取当前登陆用户

import  os
import psutil
import time
from datetime import datetime
from psutil._common import suser
info = os.uname()
print("1. 主机信息".center(50, '*'))
print("""
    操作系统: %s, 
    主机名: %s, 
    内核版本: %s, 
    硬件架构: %s
""" %(info.sysname, info.nodename, info.release, info.machine))

print("2. 开机时间".center(50, '*'))
# 获取开机时间的时间戳, 需要安装psutil模块;
boot_time = psutil.boot_time()
# 将时间戳转换为字符串格式, 两种方法, 任选一种l
# print(time.ctime(boot_time))
boot_time  = datetime.fromtimestamp(boot_time)
# 获取当前时间
now_time = datetime.now()
# 获取时间差
delta_time = now_time-boot_time
delta_time = str(delta_time).split('.')[0]
print("""
    开机时间: %s
    当前时间: %s
    开机时长: %s
""" %(boot_time,now_time, delta_time))

print("3. 当前登陆用户".center(50, '*'))
# 获取当前登陆用户的详细信息, 需求是获取用户名和登陆主机;
users = psutil.users()
# 获取需要的信息
users = {"%s %s" %(user.name, user.host) for user in users}
# 实现信息的去重
for user in users:
    print("\t  %s" %(user))

namedtuple(工厂函数)

因为元组的局限性:不能为元组内部的数据进行命名,所以往往我们并不知道一个元组所要表达的意义,
所以在这里引入了 collections.namedtuple 这个工厂函数,来构造一个带字段名的元组。
具名元组的实例和普通元组消耗的内存一样多,因为字段名都被存在对应的类里面。这个类跟普通的对象实例比起来也要小一些,因为 Python 不会用 dict来存放这些实例的属性。
如何实现:

def namedtuple(typename, field_names, *, verbose=False, rename=False, module=None):
- typename: 元组名称
- field_names : 元组中元素的名称
- rename: 如果元素名称中包含python关键字, 必须设置rename=True
举例:


from collections import  namedtuple
User = namedtuple('User', ['name', 'age', 'gender'])
u = User('fentiao', 13, 'male')
print(u.name)
print(u.age)
print(u.gender)
print(u)

猜你喜欢

转载自blog.csdn.net/qq_42687283/article/details/82709809