目录
Python 日期和时间 | 菜鸟教程
Time
获取时间:
格式化时间:strftime(tpl,ts)
将格式化字符串转换为时间戳strptime(str,tpl)
计时器功能
datetime
date类
time类
datetime类
timedelta类
Python 处理日期与时间的全面总结(7000字)
80 个例子,彻底掌握Python日期时间处理!
1.11.获取当前时间戳
时间戳:当前系统中表示时间的一个浮点数
import time
time.time() #获取当前时间戳(计算机内部时间)
# 1643336568.9237003
日期范围:1970-2038,超过此范围应该使用datetime模块
表示从1970.1.1. 0:0开始到当前时刻的秒数
1970年之前的日期无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。
1.2 获取当前时间,返回字符串
可基于时间戳进行转换
time.ctime()
#'Fri Jan 28 10:27:03 2022'
#可以传入时间戳格式时间,用来做转化
import time
timestamp = time.time()
timestr = time.ctime(timestamp)
timestr
#'Sat Jan 29 15:21:48 2022'
2.1.获取当前时间,返回计算机程序可以处理的时间格式:struct_time形式
localtime() 返回当前时间的struct_time形式,可传入时间戳格式时间,用来做转化
gmtime() 返回当前时间的struct_time形式,UTC时区(0时区) ,可传入时间戳格式时间,用来做转化
time.gmtime()
#time.struct_time(tm_year=2022, tm_mon=1, tm_mday=29, tm_hour=7, tm_min=34, tm_sec=50, tm_wday=5, tm_yday=29, tm_isdst=0)
time.localtime()
#time.struct_time(tm_year=2022, tm_mon=1, tm_mday=29, tm_hour=15, tm_min=34, tm_sec=21, tm_wday=5, tm_yday=29, tm_isdst=0)
struct_time元组——时间元组
2.3 时间戳→时间元组
时间戳→时间元组:将时间戳浮点数传递给gmtime函数
# 可传入时间戳格式时间,用来做转化
time.gmtime(time.time())
#time.struct_time(tm_year=2022, tm_mon=1, tm_mday=29, tm_hour=7, tm_min=29, tm_sec=34, tm_wday=5, tm_yday=29, tm_isdst=0)
时间戳→时间元组:将时间戳浮点数传递给localtime函数
localtime = time.localtime(time.time())
localtime
#time.struct_time(tm_year=2022, tm_mon=1, tm_mday=28, tm_hour=10, tm_min=48, tm_sec=35, #tm_wday=4, tm_yday=28, tm_isdst=0)
2.4 时间元组→时间戳
time.mktime(time.localtime())
#1643441791.0
time.mktime(time.gmtime())
#1643413005.0
2.2 asctime() 返回字符串形式的时间
可基于时间元组获取易读的格式化当前时间
time.asctime()
#'Sat Jan 29 15:27:43 2022'
#asctime() 返回字符串形式的时间,可以传入struct_time形式时间,用来做转化
time.asctime(localtime)
#'Fri Jan 28 10:48:35 2022'
time.asctime(time.gmtime())
'Sat Jan 29 07:24:00 2022'
tpl:定义输出效果
ts:struct_time元组
# 格式化成2022-01-28 03:04:00形式
time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())
#'2022-01-28 03:04:00'
# 格式化成Fri Jan 28 03:07:14形式
time.strftime("%a %b %d %H:%M:%S",time.gmtime())
#'Fri Jan 28 03:07:14'
str:字符串形式的时间值
tpl:定义输入效果
timestr = '2022-01-28 03:04:00'
time.strptime(timestr,"%Y-%m-%d %H:%M:%S")
#time.struct_time(tm_year=2022, tm_mon=1, tm_mday=28, tm_hour=3, tm_min=4, tm_sec=0, #tm_wday=4, tm_yday=28, tm_isdst=-1)
python中时间日期格式化符号:
- %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)
- %p 本地A.M.或P.M.的等价符
- %U 一年中的星期数(00-53)星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始
- %W 一年中的星期数(00-53)星期一为星期的开始
- %x 本地相应的日期表示
- %X 本地相应的时间表示
- %Z 当前时区的名称
- %% %号本身
包括的类:
date:表示日期的类。常用的属性有year, month, day
time:表示时间的类。常用的属性有hour, minute, second, microsecond
datetime:表示日期时间
timedelta:表示时间间隔,即两个时间点之间的长度
tzinfo:与时区有关的相关信息
均为不可变对象
表示日期的类
常用类方法和类属性
max、min:date对象所能表示的最大、最小日期
resolution:date对象表示日期的最小单位。这里是天
today():返回一个表示当前本地日期的date对象
fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象
fromordinal(ordinal):将Gregorian日历时间转换为date对象(特殊历法用不上)
import time
from datetime import date
date.max
#datetime.date(9999, 12, 31)
date.min
#datetime.date(1, 1, 1)
date.resolution
#datetime.timedelta(days=1)
date.today()
#datetime.date(2022, 1, 29)
date.fromtimestamp(time.time())
#datetime.date(2022, 1, 29)
实例方法和属性:
.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类似。
.toordinal():返回日期对应的Gregorian Calendar日期
today = date.fromtimestamp(time.time())#today存储了一个类对象
today.year
#2022
today.month
#1
today.day
#29
lastyear_today = today.replace(2020,1,29)
#lastyear_today
#datetime.date(2020, 1, 29)
lastyear_today.weekday()
#2
lastyear_today.isoweekday()
#3
lastyear_today.isocalendar()
#datetime.IsoCalendarDate(year=2020, week=5, weekday=3)
lastyear_today.isoformat()
#'2020-01-29'
lastyear_today.strftime("%Y-%m-%d %H:%M:%S")
#'2020-01-29 00:00:00'
lastyear_today.toordinal()
#737453
类属性和方法:
min、max:time类所能表示的最小、最大时间。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999)
resolution:时间的最小单位,这里是1微秒
from datetime import time
time.min
datetime.time(0, 0)
time.max
datetime.time(23, 59, 59, 999999)
time.resolution
datetime.timedelta(microseconds=1)
实例方法和属性:
.hour、.minute、.second、.microsecond:时、分、秒、微秒
.tzinfo:时区信息
.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变);
.isoformat():返回型如”HH:MM:SS”格式的字符串表示;
.strftime(fmt):返回自定义格式化字符串。
time()#time类的构造函数
datetime.time(0, 0)
myTime = time(22)
myTime.hour
#22
myTime.minute
#0
myTime.second
#0
myTime.microsecond
#0
nextime = myTime.replace(22,30)
#nextime.isoformat()
'22:30:00'
#nextime.strftime("%Y-%m-%d %H:%M:%S")
'1900-01-01 22:30:00'
date与time的结合体,包括date与time的所有信息
类属性与方法:
min、max:datetime所能表示的最小值与最大值;
resolution:datetime最小单位;
today():返回一个表示当前本地时间的datetime对象;
now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
utcnow():返回一个当前utc时间的datetime对象;
fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;
utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
combine(date, time):根据date和time,创建一个datetime对象;
strptime(date_string, format):将格式字符串转换为datetime对象;
import datetime
datetime.datetime(1970,1,29,1,1,1,1)#构造函数
datetime.datetime.max
#datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
datetime.datetime.min
#datetime.datetime(1, 1, 1, 0, 0)
datetime.datetime.resolution
#datetime.timedelta(microseconds=1)
datetime.datetime.today()#返回一个表示当前本地时间的datetime对象
#datetime.datetime(2022, 1, 29, 17, 50, 13, 688511)
datetime.datetime.now()
#datetime.datetime(2022, 1, 29, 17, 50, 30, 577492)
datetime.datetime.utcnow()
#datetime.datetime(2022, 1, 29, 9, 50, 43, 658491)
import time
datetime.datetime.fromtimestamp(time.time())
#datetime.datetime(2022, 1, 29, 17, 51, 20, 359494)
datetime.datetime.utcfromtimestamp(time.time())
#datetime.datetime(2022, 1, 29, 9, 51, 35, 160494)
mydate = datetime.date.today()
mytime = datetime.time(22,30,30)
mydatetime = datetime.datetime.combine(mydate,mytime)
timestr = '2022-01-28 03:04:00'
lastdate = datetime.datetime.strptime(timestr,"%Y-%m-%d %H:%M:%S")
实例方法与属性:
today = datetime.datetime.today()#返回一个表示当前本地时间的datetime对象
today.year
#2022
today.month
#1
today.day
#29
today.hour
#18
today.minute
#2
today.second
#50
today.microsecond
#431511
mydate = today.date()#获取date对象
mytime = today.time()#获取time对象
today.replace(2020,1,29,18,5)
#datetime.datetime(2020, 1, 29, 18, 5, 50, 431511)
today.timetuple()
#time.struct_time(tm_year=2022, tm_mon=1, tm_mday=29, #tm_hour=18, tm_min=2, tm_sec=50, tm_wday=5, tm_yday=29, tm_isdst=-1)
today.utctimetuple()
#time.struct_time(tm_year=2022, tm_mon=1, tm_mday=29, #tm_hour=18, tm_min=2, tm_sec=50, tm_wday=5, tm_yday=29, tm_isdst=0)
today.toordinal()
#738184
today.weekday()
#5
today.isocalendar()
datetime.IsoCalendarDate(year=2022, week=4, weekday=6)
today.isoformat()
#'2022-01-29T18:02:50.431511'
today.ctime()
#'Sat Jan 29 18:02:50 2022'
today.strftime("%Y-%m-%d %H:%M:%S")
#'2022-01-29 18:02:50'
时间间隔对象
构造函数:
class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
1.没有必填参数
2.两个时间间隔对象可以彼此之间相加或相减
3.一个datetime对象减去一个时间间隔对象,返回对应减去之后的datetime对象
4.两个datetime对象相减返回的是一个时间间隔对象
5.对date,time同样适用
delta1 = datetime.timedelta(days=1)
today = datetime.datetime.today()
yesterday = today - delta1
#yesterday
datetime.datetime(2022, 1, 28, 20, 24, 7, 609998)
delta2 = datetime.timedelta(days=2)
delta3 = delta1 + delta2
#threeDaysago = today - delta3
threeDaysago
datetime.datetime(2022, 1, 26, 20, 24, 7, 609998)
yearsago = datetime.datetime(1970,1,29)
today = datetime.datetime.today()
dalte1 = today - yearsago
dalte1
#datetime.timedelta(days=18993, seconds=73770, microseconds=59842)