python-时间日期-time,datetime

time-datatime

概要

Python中表示时间的两种方式

  1. 时间戳 :相对于1970.1.1 00:00:00 以秒计算的偏移量,唯一的
  2. 时间元组struct_time:共有9个元素
  • tm_year:年1-12
  • tm_mon:月1-12
  • tm_mday:日1-31
  • tm_hour:时0-23
  • tm_min:分0-59
  • tm_sec:秒0-59
  • tm_wday:星期0-6(0表示周日)
  • tm_day:一年中的第几天1-366
  • tm_isdst:是否是夏令,默认为-1

time模块

time是归类在常规操作系统服务中,它提供的功能更加接近于操作系统层面。其所能表述的日期范围被限定在1970-2038之间,如果需要表述范围之外的日期,可能需要考虑使用datetime模块更好。

图片

  • time() 返回时间戳格式的时间

  • ctime() 返回字符串形式的时间,可以传入时间戳格式时间,用来做转化

  • asctime() 返回字符串形式的时间,可以传入struct_time形式时间,用来做转化

  • localtime() 返回当前时间的struct_time形式,可传入时间戳格式时间,用来做转化

  • gmtime() 返回当前时间的struct_time形式,UTC时区(0时区) ,可传入时间戳格式时间,用来做转化

  • struct_time共有9个元素,其中前面6个为年月日时分秒,后面三个分别代表的含义为:

  • tm_wday 一周的第几天(周日是0)

  • tm_yday 一年的第几天

  • tm_isdst 是否是夏令时

常用方法:

time.sleep([sec]) 推迟指定时间后继续运行,单位: 秒 s

time.time() 获取时间戳。返回的是一个float类型的数值。

time.localtime([sec]) 将一个时间戳转化成一个当时时区的struct_time,如果sec参数未输入,则以当前时间为转化标准

time.gmtime([secs]) 将一个时间戳转换为UTC时区 的 struct_time (时区时间格式)

time.mktime(t) 相对的 将一个struct_time转换为时间戳

time.asctime([t]) 把一个表示时间的元组或者struct_time表示为 ‘Sun Aug 23 14:31:59 2015’ 这种形式

time.strftime(format[,t])将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出

  • format:格式化字符串
  • t :可选的参数是一个struct_time对象
时间字符串支持的格式符号:(区分大小写)

  
%c  本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06) 

%x  本地相应日期字符串(如15/08/01)     
%X  本地相应时间字符串(如08:08:10)     
%y  去掉世纪的年份(00 - 99)两个数字表示的年份       
%Y  完整的年份(4个数字表示年份)

%m  月份(01 - 12) 
%d  一个月中的第几天(01 - 31)  
%H  一天中的第几个小时(24小时制,00 - 23) 
%I  第几个小时(12小时制,0 - 11) 
%M  分钟数(00 - 59)   
%S  秒(00 - 61)  
%f  微妙(范围0.999999)    
      
%j  一年中的第几天(001 - 366)     
%w  一个星期中的第几天(0 - 6,0是星期天)  

%p  本地am或者pm的相应符      
%U  一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之    前的所有天数都放在第0周。     
%W  和%U基本相同,不同的是%W以星期一为一个星期的开始。    
%z  与UTC时间的间隔(如果是本地时间,返回空字符串)
%Z  时区的名字(如果是本地时间,返回空字符串)       
%%  ‘%’字符  

%a  本地星期名称的简写(如星期四为Thu)      
%A  本地星期名称的全称(如星期四为Thursday)      
%b  本地月份名称的简写(如八月份为agu)    
%B  本地月份名称的全称(如八月份为august)     
函数 描述 输入、输出
time.sleep(secs) 推迟指定的时间运行 输入单位
time.time() 返回当前时间的时间戳 输出float
time.localtime([secs]) 返回当前时区的struct_time 元组 secs 可选,单位
time.gmtime([secs]) 将一个时间戳转换为UTC时区 的 struct_time (时区时间格式)
time.mktime(t) 相对的 将一个struct_time转换为时间戳
time.asctime([t]) 把一个表示时间的元组struct_time表示为 ‘Sun Aug 23 14:31:59 2015’
time.ctime([secs]) 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式
time.strftime(format[,t]) 根据指定的格式化字符串输出 输入struct_time
time.strptime() 解析表示时间的字符串并返回struct_time

案例1


import time
print(time.time())   # 返回时间戳
# 1626832245.6659722

#--------------------------------------------------------------------
print(time.time())
print(time.localtime())   # 返回 struct_time
#1626832423.3920887

print(time.localtime(1626832399.169254))  # 将一个时间戳转换为当前时区的struct_time


#time.struct_time(tm_year=2021, tm_mon=7, tm_mday=21, tm_hour=9, tm_min=53, tm_sec=43, tm_wday=2, tm_yday=202, tm_isdst=0)
#time.struct_time(tm_year=2021, tm_mon=7, tm_mday=21, tm_hour=9, tm_min=53, tm_sec=19, tm_wday=2, tm_yday=202, tm_isdst=0)

#--------------------------------------------------------------------
# 线程睡眠指定时间,单位为秒
time.sleep(10)

案例2

print(time.asctime(time.gmtime()))

# Tue Sep 21 11:17:50 2021

print(time.ctime(1440338541.0))
print(time.ctime())

# Sun Aug 23 22:02:21 2015
# Tue Sep 21 19:19:04 2021

案例3

localtime=time.localtime()
print(dir(localtime))
# [...,'tm_hour', 'tm_isdst', 'tm_mday', 'tm_min', 'tm_mon', 'tm_sec', 'tm_wday', 'tm_yday', 'tm_year', 'tm_zone']


print(localtime)
# time.struct_time(tm_year=2021, tm_mon=9, tm_mday=21, tm_hour=19, tm_min=21, tm_sec=58, tm_wday=1, tm_yday=264, tm_isdst=0)

print(localtime.tm_year)
# 2021	


strtime=time.strftime("%Y-%m-%d %H:%M:%S",  localtime)
print(strtime)


# 2021-09-21 19:21:58

# 直接使用字符串拼接成格式时间字符串
print(str(localtime.tm_year) + "年" + str(localtime.tm_mon) + "月" + str(localtime.tm_mday) + "日")

# 2021年9月21日

print(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime()))
# 2021/09/21 20:12:46

案例4

import time

time_string = "21 June, 2018"
result = time.strptime(time_string, "%d %B, %Y")

print(result)

# time.struct_time(tm_year=2018, tm_mon=6, tm_mday=21, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=172, tm_isdst=-1)

datetime模块

参考文献:https://blog.csdn.net/gty931008/article/details/80254806

datetime比time高级了不少,可以理解为datetime基于time进行了封装,提供了更多实用的函数

datetime模块定义了以下几个类:

函数 描述
datetime.date 表示日期,常用的属性有:year, month和day
datetime.time 表示时间,常用属性,hour,minute,second,
datetime.datetime 表示日期时间
datetime.timedelta 表示时间间隔
datetime.tzinfo 表示时区
datetime.timezone

date类

date类定义了一些常用的类方法与类属性,date对象由year年份、month月份及day日期三部分构成

  • max、min:date对象所能表示的最大、最小日期

  • resolution:date对象表示日期的最小单位。这里是天

  • today():返回一个表示当前本地日期的date对象

  • fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象

date.today()提供的实例方法和属性

  • year:返回年

  • month:返回月

  • day:返回日

  • replace(year, month, day):返回新的日期对象,参数指定的年,月,日代替原有对象中的属性,原有对象仍保持不变

  • weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推

  • isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推

  • isocalendar():返回格式如(year, wk num, wk day)

  • isoformat():返回格式如’YYYY-MM-DD’的字符串

  • strftime(fmt):自定义格式化字符串。与time模块中的strftime类似

import datetime


date1=datetime.date(2017,3,22)
print(date1.year)
print(date1.month)
print(date1.day)

today1=datetime.date.today()
print(today1.year)

# 2017
# 3
# 22
# 2021

# 两个时间点的差距
print(today1-date1)
# 1653 days, 0:00:00

# 返回标准时间   返回符合ISO 8601标准   YYYY-MM-DD
print(date1.isoformat())
# 2017-03-22


格式输出

print(date1.__format__('%Y-%m-%d'))
print(date1.__format__('%Y/%m/%d'))
print(date1.__format__('%y/%m/%d'))

# 2017-03-22
# 2017/03/22
# 17/03/22

等价的方法为strftime(...)
print(data1.strftime("%Y-%m-%d"))
# # 2017-03-22


time类

class datetime.time(hour, [minute[, second, [microsecond[, tzinfo]]]])

time类由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成

参数名称 取值范围
hour [0, 23]
minute [0, 59]
second [0, 59]
microsecond [0, 1000000]
tzinfo tzinfo的子类对象,如timezone类的实例

方法

属性和方法 描述
t.hour
t.minute
t.second
t.tzinfo 返回传递给time构造方法的tzinfo对象
t.replace(hour[, minute[, second[, microsecond[, tzinfo]]]]) 生成并返回一个新的时间对象,原时间对象不变
t.isoformat() 返回一个‘HH:MM:SS.%f'格式的时间字符串
t.strftime() 返回指定格式的时间字符串,与time模块的strftime(format, struct_time)功能相同
t.__ format __('%H:%M:%S')
>>> a = datetime.time(12,20,59,899)   # 初始化
>>> a
datetime.time(12, 20, 59, 899)
>>> a.hour
12
>>> a.minute
20
>>> a.second
59
>>> a.microsecond
899
>>> a.tzinfo

字符串输出方式

>>> a = datetime.time(12,20,59,899)
>>> a.__format__('%H:%M:%S')
'12:20:59'


或者使用  strftime
>>> a = datetime.time(12,20,59,899)
>>> a.strftime('%H:%M:%S')
'12:20:59'

datetime类

class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

参数名称 取值范围
year [MINYEAR, MAXYEAR]
month [1, 12]
day [1, 指定年份的月份中的天数]
hour [0, 23]
minute [0, 59]
second [0, 59]
microsecond [0, 1000000]
tzinfo tzinfo的子类对象,如timezone类的实例

属性和方法

对象方法/属性名称 描述
dt.year, dt.month, dt.day 年、月、日
dt.hour, dt.minute, dt.second 时、分、秒
dt.microsecond, dt.tzinfo 微秒、时区信息
dt.date() 获取datetime对象对应的date对象
dt.time() 获取datetime对象对应的time对象, tzinfo 为None
dt.timetz() 获取datetime对象对应的time对象,tzinfo与datetime对象的tzinfo相同
dt.timetuple() 返回datetime对象对应的tuple(不包括tzinfo)
dt.utctimetuple() 返回datetime对象对应的utc时间的tuple(不包括tzinfo)
dt.isoformat([sep]) 返回一个‘%Y-%m-%d
dt.strftime(format) 返回指定格式的时间字符串
from datetime import datetime,timezone
date=datetime.today()
date1=datetime(2017, 2, 4, 20, 44, 40, 556318)
date2=datetime(2017, 2, 4, 20, 44, 56, 572615)


date3=datetime.now(timezone.utc)
print(date3)
print(date.utcnow())
# 2021-10-15 09:24:36.352276+00:00
# 2021-10-15 09:24:36.353277


res=datetime.fromtimestamp(time.time())
print(res)
date1=datetime(2017, 2, 4, 20, 46, 41, 97578)
print(date1)

date2=datetime.utcfromtimestamp(time.time())
print(date2)

date4=datetime(2017, 2, 4, 20, 5, 40, 8888)
res=date4.strptime('2017/02/04 20:49', '%Y/%m/%d %H:%M')
print(res)

#2021-10-15 17:33:22.824000
#2017-02-04 20:46:41.097578
#2021-10-15 09:33:22.824000
#2017-02-04 20:49:00


print(res.day)
print(res.second)
print(res.hour)
#4
#0
#20

print(res.timestamp())
print(res.date())
print(res.replace(2021))
#1486212540.0
#2017-02-04
#2021-02-04 20:49:00


print(res.isoformat())
print(res.isoformat(sep='/'))
print(res.isoformat(sep=' '))
print(res.strftime('%Y%m%d %H:%M'))

#2017-02-04T20:49:00
2017-02-04/20:49:00
2017-02-04 20:49:00
20170204 20:49

计算时间差

import time 
from datetime import datetime 

a=datetime.now() 
time.sleep(1)
b=datetime.now() 
 
print(a)
print(b)

print(str(a))
# 'Z2015-04-07 04:30:03.628556' 

print(datetime.strptime(str(a),"%Y-%m-%d %H:%M:%S.%f"))

c=b-a
print(c)
print(c.seconds)


# 2021-10-15 17:10:20.121184
# 2021-10-15 17:10:21.121714
# 2021-10-15 17:10:20.121184
# 2021-10-15 17:10:20.121184
# 0:00:01.000530
# 1

import time
import datetime
d1 = datetime.datetime(2005, 2, 16)
d2 = datetime.datetime(2004, 12, 31)

print(d2-d1).days
# 47

posted @ 2021-10-28 17:39  贝壳里的星海  阅读(317)  评论(0编辑  收藏  举报