####1.文件的时间戳####
系统中文件存在的三个时间戳:
atime:文件内容最后一次被访问的时间
mtime:文件内容最后一次被修改的时间
ctime:文件内容或属性最后一次被修改的时间
stat 文件名称 #查看文件的时间戳
touch 文件名称 #修改文件的时间戳
[kiosk@foundation40 ~]$ stat file #查看文件的时间戳
File: ‘file’
Size: 4056 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 814768906 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ kiosk) Gid: ( 1000/ kiosk)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2019-06-11 15:43:49.144953000 +0800 #文件内容最后一次被访问的时间
Modify: 2019-06-01 17:37:17.901314000 +0800 #文件内容最后一次被修改的时间
Change: 2019-06-13 09:14:10.433841560 +0800 #文件内容或属性最后一次被修改的时间
Birth: -
[kiosk@foundation40 ~]$ touch file #改变文件的时间戳
[kiosk@foundation40 ~]$ stat file
File: ‘file’
Size: 4056 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 814768906 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ kiosk) Gid: ( 1000/ kiosk)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2019-06-13 09:14:44.315428399 +0800
Modify: 2019-06-13 09:14:44.315428399 +0800
Change: 2019-06-13 09:14:44.315428399 +0800
Birth: -
[kiosk@foundation40 ~]$ cat file #查看文件内容
[kiosk@foundation40 ~]$ stat file
File: ‘file’
Size: 4056 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 814768906 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ kiosk) Gid: ( 1000/ kiosk)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2019-06-13 09:15:10.506466675 +0800 #文件内容最后一次被访问的时间改变
Modify: 2019-06-13 09:14:44.315428399 +0800
Change: 2019-06-13 09:14:44.315428399 +0800
Birth: -
[kiosk@foundation40 ~]$ chmod 777 file #改变文件权限
[kiosk@foundation40 ~]$ stat file
File: ‘file’
Size: 4056 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 814768906 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ kiosk) Gid: ( 1000/ kiosk)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2019-06-13 09:15:10.506466675 +0800
Modify: 2019-06-13 09:14:44.315428399 +0800
Change: 2019-06-13 09:15:35.535258696 +0800 #文件内容或属性最后一次被修改的时间改变
Birth: -
[kiosk@foundation40 ~]$ echo hello > file #给文件追加内容
[kiosk@foundation40 ~]$ stat file
File: ‘file’
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 814768906 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ kiosk) Gid: ( 1000/ kiosk)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2019-06-13 09:15:10.506466675 +0800
Modify: 2019-06-13 09:16:12.462253953 +0800 #文件内容最后一次被修改的时间改变
Change: 2019-06-13 09:16:12.462253953 +0800
Birth: -
python中获取文件的时间戳
import os #导入os模块
import os #导入os模块
mtime = os.path.getmtime('/home/kiosk/file') #定义一个变量接受时间戳mtime
atime = os.path.getatime('/home/kiosk/file')
ctime = os.path.getctime('/home/kiosk/file')
print(atime)
print(mtime)
print(ctime)
运行结果:
1560388510.5064666 #atime
1560388572.462254 #mtime
1560388572.462254 #ctime
###time 模块####
表示时间的几种类型
1). 时间戳
2). 字符串的时间
3). 元组类型的时间
import time
#1.时间戳
print(time.time())
#2.字符串时间
print(time.ctime())
#3.元组时间
print(time.localtime())
运行结果:
1560389629.9604971 时间戳
Thu Jun 13 09:33:49 2019 字符串时间
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=13, tm_hour=9, tm_min=33, tm_sec=49, tm_wday=3, tm_yday=164, tm_isdst=0) 元组时间
时间戳:
时间戳是以自1970年1月1日午夜经过多长时间表示的,最适合做日期运算
元组时间:
属性 | 值 |
---|---|
tm_year | 年份;例如:2019 |
tm_mon | 月份 ;1-12 个月 |
tm_mday | 天;1-31天 |
tm_hour | 小时;0-23时 |
tm_min | 分钟;1-60分钟 |
tm_sec | 秒;1-60秒 |
tm_wday | 一周的第几天;0-6(0是星期一) |
tm_yday | 一年的第几天 |
tm_isdst | -1,0,1 ;-1是决定是否为夏令时的旗帜 |
在元组时间中获取准确时间
info = time.localtime() #定义一个变量接受元组时间
print(info.tm_year) #打印出元组时间中的年
print(info.tm_mon) #打印出元组时间中的月
运行结果:
2019
6
###2.常用时间的转换###
1.把元组的时间转换为时间戳 time.mktime(tuple_time)
注意:不能将字符串时间转化成时间戳
import time
import os
tuple_time = time.localtime() #获取元组时间
print(tuple_time)
print(time.mktime(tuple_time)) #把元组的时间转换为时间戳
2.格式化日期:把元组时间转换成字符串时间 time.strftime(‘%Y-%m-%d %H:%M:%S’ ,元组时间)
用time模块strtime方法,按照想要的格式对日期进行格式化,只需要组合相应的格式划符号即可
import time
import os
tuple_time = time.localtime()
print(time.strftime('%m-%d',tuple_time))
print(time.strftime('%Y-%m-%d',tuple_time))
print(time.strftime('%T',tuple_time))
print(time.strftime('%F',tuple_time))
运行结果:
06-13
2019-06-13
10:06:02
2019-06-13
符号 | 代表的意义 |
---|---|
%y | 两位数的年份表示(00-99) |
%Y | 四位数的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月内中的一天(0-31) |
%H | 24小时制小时数(0-23) |
%M | 分钟数(00=59) |
%S | 秒(00-59) |
%T | 当前的时分秒:11:47:46 |
也可以将格式化的时间转换成元组时间 time.strptime(时间,对应的格式化时间)
当给出的格式化时间不完全包含元组时间的9个元素时,系统默认补充
import time
time1 = '2019-6-10'
print(time.strptime(time1,'%Y-%m-%d'))
time2 = '11:30:50'
print(time.strptime(time2,'%H:%M:%S')
运行结果:
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=10, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=161, tm_isdst=-1)
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=11, tm_min=30, tm_sec=50, tm_wday=0, tm_yday=1, tm_isdst=-1)
3.将时间戳时间转换成为字符串时间 time.ctime(time)
import time
import os
time1 = time.time() #定义变量接受时间戳时间
print(time1)
ctime = time.ctime(time1) 将时间戳时间转换成为字符串时间
print(ctime)
- 将时间戳转换为元组 time.localtime(time)
注意:字符串时间不能转化成元组时间
import time
import os
time1 = time.time() #定义变量接受时间戳时间
print(time1)
tuple_time = time.localtime(time1) #将时间戳转换为元组
print(tuple_time)
5.将元组类型转换为时间戳 time.mktime(time)
import time
import os
tuple_time = time.localtime() #获取元组时间
print(time.mktime(tuple_time)) #将元组类型转换为时间戳
###datetime模块####
使用datetime获取当前的时间和日期
date.today() #当前日期(年月日)
datetime.now() #当前日期(年月日)
import os
from datetime import date
from datetime import datetime
from datetime import timedelta
print(date.today()) #当前日期(年月日)
print(datetime.now()) #当前日期(年月日)
运行:
2019-06-13
2019-06-13 10:36:14.298744 #精确到毫秒
timedelta(days=天数) #生成一个时间段对象,使用该对象得到这个时间段前后的时间段时间
import os
from datetime import date
from datetime import datetime
from datetime import timedelta
# 如何计算六天前的时间和六天后的时间
d = date.today()
delta = timedelta(days=6)
print(d + delta)
print(d - delta)
运行:
2019-06-19
2019-06-07
# 如何计算两个小时前的时间和两个小时后的时间
now_hour = datetime.now()
delta = timedelta(hours=2)
print(now_hour - delta)
print(now_hour + delta)
运行:
2019-06-13 08:39:10.391833
2019-06-13 12:39:10.391833
返回两个时间,想计算两个时间之间的时间差
注意:要将两个时间转化成统一的时间才可以计算
datetime.fromtimestamp(时间戳) #将时间戳转化成datetime形式
import os
from datetime import date
from datetime import datetime
from datetime import timedelta
now_time = datetime.now() #获取当前时间
print(now_time)
pwd_time = os.path.getmtime('/etc/passwd') #获取文件的时间戳mtime
print(pwd_time)
pwd_time_obj = datetime.fromtimestamp(pwd_time) #将时间戳转化成datetime形式
print(pwd_time_obj)
delta = now_time - pwd_time_obj #当前时间- 文件的mtime
print(delta)
运行:
2019-06-13 10:40:13.705259
1558745372.2711713
2019-05-25 08:49:32.271171 #将时间戳转化成datetime形式
19 days, 1:50:41.434088 #时间差
应用案例_系统监控
需求:
1. 获取当前主机信息, 包含操作系统名, 主机名,
内核版本, 硬件架构等
2. 获取开机时间和开机时长;
3. 获取当前登陆用户
import os
import psutil
from datetime import datetime
print('主机信息'.center(40,'#'))
info = os.uname()
print(
"""
操作系统:%s
主机名称:%s
内核版本:%s
硬件架构:%s
"""%(info.sysname,info.nodename,info.release
,info.machine)
)
print('开机时间'.center(40,'#'))
boot_time = psutil.boot_time() #返回一个时间戳
# 将时间戳转化为datetime类型的时间
boot_time_obj = datetime.fromtimestamp(boot_time)
now_time = datetime.now()
delta_time = datetime.now()
delta_time = now_time - boot_time_obj
print('开机时间:',boot_time_obj)
# str是为了将时间对象转换为字符串,实现分离
print('当前时间:',str(now_time).split('.')[0])
print('开机时长:',str(delta_time).split('.')[0])
print('当前登陆用户'.center(40,'*'))
login_user = psutil.users()[0].name
print(login_user)
运行结果:
##################主机信息##################
操作系统:Linux
主机名称:foundation40.ilt.example.com
内核版本:3.10.0-514.el7.x86_64
硬件架构:x86_64
##################开机时间##################
开机时间: 2019-06-13 08:50:30
当前时间: 2019-06-13 10:58:21
开机时长: 2:07:51
*****************当前登陆用户*****************
kiosk