系统中文件存在三个时间戳:
atime:文件内容最后一次被访问的时间戳
mtime:文件内容最后一次被修改的时间戳
ctime:文件内容或者属性最后一次被修改的时间戳
stat 文件名称
#查看文件的时间戳
touch 文件名称
#同时修改文件的三个时间戳
[root@foundation47 public]# stat lala # 查看文件的时间戳
File: ‘lala’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 271429794 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2019-06-07 12:20:07.206887783 +0800 # atime
Modify: 2019-06-07 12:20:07.206887783 +0800 # mtime
Change: 2019-06-07 12:22:08.639886676 +0800 # ctime
Birth: -
[root@foundation47 public]# touch lala # 使用touch命令 同时修改文件的三个时间戳
[root@foundation47 public]# stat lala
File: ‘lala’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 271429794 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2019-06-07 15:45:08.971775666 +0800
Modify: 2019-06-07 15:45:08.971775666 +0800
Change: 2019-06-07 15:45:08.971775666 +0800 # 三个时间戳同时更新
Birth: -
[root@foundation47 public]# cat lala # 访问文件的内容
[root@foundation47 public]# stat lala
File: ‘lala’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 271429794 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2019-06-07 15:50:44.408772609 +0800 # atime 更新
Modify: 2019-06-07 15:45:08.971775666 +0800
Change: 2019-06-07 15:45:08.971775666 +0800
Birth: -
[root@foundation47 public]# chmod 777 lala # 改变文件的权限属性
[root@foundation47 public]# stat lala
File: ‘lala’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 271429794 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2019-06-07 15:50:44.408772609 +0800
Modify: 2019-06-07 15:45:08.971775666 +0800
Change: 2019-06-07 15:51:01.427772454 +0800 # ctime更新
Birth: -
[root@foundation47 public]# echo hahaha > lala #改变文件内容
[root@foundation47 public]# stat lala
File: ‘lala’
Size: 7 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 271429794 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2019-06-07 15:50:44.408772609 +0800
Modify: 2019-06-07 15:51:16.302772319 +0800 # mtime更新
Change: 2019-06-07 15:51:16.302772319 +0800 # ctime更新
Birth: -
import os #必须先导入os模块
os.path.getatime('/public/lala')
# 获取文件的atime
os.path.getmtime('/public/lala')
# 获取文件的mtile
os.path.getctime('/public/lala')
#获取文件的ctime
注意:通过次方式获得的时间都是时间戳形式的时间
import os
ctime = os.path.getctime('/public/lala')
mtime = os.path.getmtime('/public/lala')
atime = os.path.getatime('/public/lala')
print(ctime)
print(mtime)
print(atime)
#输出结果:
1559893876.3027723
1559893876.3027723
1559893844.4087727 # 输出时间戳形式的时间
1). 时间戳
2). 字符串的时间
3). 元组类型的时间
import time #导入时间time模块
print(time.time()) #输出当前时间(时间戳)
print(time.ctime()) #输出当前时间(字符串时间)
print(time.localtime()) #输出当前时间(元组时间)
#输出结果:
1559897430.7819257 #时间戳时间
Fri Jun 7 16:50:30 2019 #字符串时间
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=7, tm_hour=16, tm_min=50, tm_sec=30, tm_wday=4, tm_yday=158, tm_isdst=0) #元组时间
时间戳:
时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示,时间戳单位最适于做日期运算
元组时间:
用一个元组装起来的9组数字处理时间:
属性 | 值 |
---|---|
tm_year | 年份;四位数字 |
tm_mon | 月份;1 到 12 |
tm_mday | 天;1 到 31 |
tm_hour | 小时; 0 到 23 |
tm_min | 分钟; 0 到 59 |
tm_sec | 秒; 0 到 61 (60或61 是闰秒) |
tm_wday | 一周的第几天; 0到6 (0是周一) |
tm_yday | 一年的第几天; 1 到 366(儒略历) |
tm_isdst | -1, 0, 1, -1是决定是否为夏令时的旗帜 |
可以通过属性关键字得到其所对应的具体的时间信息:
info = time.localtime() # 用一个变量接收元组时间
info.tm_year # 返回年份
info.tm_mon # 返回月份
元组时间的九个属性都可以分别输出。
需求
利用time.time()方法,我们可以计算两个时间点
之间的时间间隔,但是有些时候我们想要得到/etc/group
文件的最后a/c/m的时间,对应的年月日这些信息
并保存再文件date.txt文件中
import os
import time
atime = os.path.getatime('/public/lala')
mtime = os.path.getmtime('/public/lala')
ctime = os.path.getctime('/public/lala')
tuple_atime = time.localtime(atime)
tuple_mtime = time.localtime(mtime)
tuple_ctime = time.localtime(ctime)
with open('/public/lala_date.txt','a')as f:
f.write('atime'.center(40,'*'))
f.write('\n')
f.write('%d %d %d\n' %(tuple_atime.tm_year,tuple_atime.tm_mon,tuple_atime.tm_mday))
f.write('mtime'.center(40,'*'))
f.write('\n')
f.write('%d %d %d\n' %(tuple_mtime.tm_year,tuple_mtime.tm_mon,tuple_mtime.tm_mday))
f.write('ctime'.center(40,'*'))
f.write('\n')
f.write('%d %d %d\n' %(tuple_ctime.tm_year,tuple_ctime.tm_mon,tuple_ctime.tm_mday))
#输出结果:
*****************atime******************
2019 6 7
*****************mtime******************
2019 6 7
*****************ctime******************
2019 6 7
1 把元组的时间转换为时间戳
time.mktime(tuple_time)
# 将给出的元组时间转化成时间戳。
注意:不能将字符串时间转化成时间戳
import time
tuple_time = time.localtime()
print(tuple_time)
tuple_time2 = time.mktime(tuple_time)
print(tuple_time2)
#输出结果:
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=8, tm_hour=10, tm_min=38, tm_sec=42, tm_wday=5, tm_yday=159, tm_isdst=0) # 元组时间
1559961522.0 # 转化之后的时间戳时间
2 将时间戳转换为元组时间
time.localtime(time1)
# 将给出的时间戳时间转化成元组时间
注意:字符时间不能转换成元组时间
import time
time1 = time.time()
print(time1)
tuple_time1 = time.localtime(time1)
print(tuple_time1)
#输出结果:
1559963672.5279589 # 给出的时间戳
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=8, tm_hour=11, tm_min=14, tm_sec=32, tm_wday=5, tm_yday=159, tm_isdst=0) # 转换完成的元组时间
3 将时间戳类型转换成为字符串时间
time.ctime(time1)
# 将给出的时间戳转化成字符串时间
import time
time1 = time.time()
print(time1)
ctime1 = time.ctime(time1)
print(ctime1)
#输出结果:
1559964353.1933248 # 给出的时间戳时间
Sat Jun 8 11:25:53 2019 # 转化成的字符串时间
4 格式化日期:把元组时间转换成字符串时间
使用 time 模块的 strftime 方法来格式化日期:可以按照想要的格式对日期进行格式化,只需要组合相应的格式化符号即可
格式:time.strftime("%Y-%m-%d %H:%M:%S", 元组时间)
#常用的习惯:年月日之间使用-连接。时分秒之间使用:连接。
符号 | 代表的意义 |
---|---|
%y | 两位数的年份表示(00-99) |
%Y | 四位数的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月内中的一天(0-31) |
%H | 24小时制小时数(0-23) |
%I | 12小时制小时数(01-12) |
%M | 分钟数(00=59) |
%S | 秒(00-59) |
%a | 本地简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化的月份名称 |
%B | 本地完整的月份名称 |
%c | 本地相应的日期表示和时间表示 |
%j | 年内的一天(001-366) |
%U | 一年中的星期数(00-53)星期天为星期的开始 |
%w | 星期(0-6),星期天为星期的开始 |
%W | 一年中的星期数(00-53)星期一为星期的开始 |
%T | 当前的时分秒:11:47:46 |
%F | 当前的年月日:2019-06-08 |
import time
time1 = time.localtime()
print(time1)
print(time.strftime("%Y-%m-%d %H:%M:%S", time1))
print(time.strftime( '%B %d %A %H:%M:%S' ,time1) )
print(time.strftime( '%T' ,time1) )
print(time.strftime( '%F' ,time1) )
#输出结果:
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=8, tm_hour=11, tm_min=45, tm_sec=20, tm_wday=5, tm_yday=159, tm_isdst=0)
2019-06-08 11:45:20
June 08 Saturday 11:45:20
11:47:46
2019-06-08
5 也可以将格式化的时间转换成元组时间。
当给出的格式化时间不能包含元组时间的9个元素的的时候,系统会用默认值补充完整。
格式:time.strptime(时间,时间对应的格式化符号)
import time
s = '2019-6-6'
print(time.strptime(s,'%Y-%m-%d'))
s_time = '09:00:00'
print(time.strptime(s_time,'%H:%M:%S'))
#输出结果:
me(tm_year=2019, tm_mon=6, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=157, tm_isdst=-1) # 时分秒被默认补充为0
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=9, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1) # 年月日被补充为1900-01-01
使用datetime模块来获取当前的日期和时间
date.today()
# 返回当前的日期,2019-06-08
datetime.now()
# 返回当前的日期+时间,2019-06-08 12:11:00.127438
timedelta(days=5)
# 生成一个时间段对象,使用该对象可以得到该段时间之前之后的时间。
计算5天前的时间和5天后的时间
from datetime import date
from datetime import timedelta
date_now = date.today() # 得到当前日期
delta = timedelta(days=5) # 规定时间间隔
date_befor = date_now - delta # 得到之前的日期
date_after = date_now + delta # 得到之后的日期
print(date_now)
print(date_befor)
print(date_after)
#输出结果:
2019-06-08 # 当前日期
2019-06-03 # 五天前日期
2019-06-13 # 五天后日期
计算5个小时前的时间和5个小时后的时间
from datetime import datetime
from datetime import timedelta
date_now = datetime.today()
delta = timedelta(hours=5)
date_befor = date_now - delta
date_after = date_now + delta
print(date_now)
print(date_befor)
print(date_after)
#输出结果:
2019-06-08 12:23:03.757117
2019-06-08 07:23:03.757117
2019-06-08 17:23:03.757117
返回两个时间,想计算两个时间之间的时间差
向需要将两个时间转化成统一的时间形式:
datetime.fromtimestamp(时间戳)
# 可以将时间戳转化成一个datetime形式的时间
import os
from datetime import datetime
now_time = datetime.now()
print(now_time)
mtime = os.path.getmtime('/public/lala')
print(mtime)
mtime_obj = datetime.fromtimestamp(mtime)
print(mtime_obj)
delta = now_time - mtime_obj
print(delta)
#输出结果:
1559893876.3027723 # 得到的文件时间戳
2019-06-07 15:51:16.302772 # 将其转化成的datetime形式的时间
20:39:22.953600 # 计算出来的时间差
需求:
1. 获取当前主机信息, 包含操作系统名, 主机名, 内核版本, 硬件架构等
2. 获取开机时间和开机时长;
3. 获取当前登陆用户
import os
import psutil
from datetime import datetime
print('主机信息'.center(50,'#'))
sys_info = os.uname()
print(
"""
操作系统:%s
主机名称:%s
内核版本:%s
硬件架构:%s
""" %(sys_info.sysname,sys_info.nodename,sys_info.release,sys_info.machine)
)
print('开机时间'.center(50,'#'))
boot_time = datetime.fromtimestamp(psutil.boot_time())
now_time = datetime.now()
delta_time = now_time - boot_time
print(
"""
开机时间:%s
目前时间:%s
开机时长:%s
""" %(boot_time,str(now_time).split('.')[0],str(delta_time).split('.')[0])
)
print('用户信息'.center(50,'#'))
login_user = psutil.users()[0].name
print(login_user)
#输出结果:
#######################主机信息#######################
操作系统:Linux
主机名称:foundation47.ilt.example.com
内核版本:3.10.0-514.el7.x86_64
硬件架构:x86_64
#######################开机时间#######################
开机时间:2019-06-08 09:35:26
目前时间:2019-06-08 12:52:07
开机时长:3:16:41
#######################用户信息#######################
kiosk