#####python(十)时间模块###

####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)
  1. 将时间戳转换为元组 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


                                                     
                                                     

猜你喜欢

转载自blog.csdn.net/weixin_44821839/article/details/91353586