python标准库--datetime模块
-
time模块:格式化时间 -
时间间隔:以 秒为单位的浮点数
-
时间戳:以自从 1970年1月1日午夜 经过多长时间来表示。
-
时间戳最适合存储,因为时间戳确定了,时区也就确定了。
-
-
导入
time模块:import time
time模块常用方法
-
time.time():获取当前时间戳。import time
# 获取当前时间戳
print(time.time())
-
tiem.localtime(float):将时间戳形式的浮点数转换为时间元组。-
时间元组: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是决定是否是夏令时的标志)
import time
# 获取当前时间戳
now_stamp = time.time()
print(type(now_stamp)) # <class 'float'>
# 将当前时间戳转为时间元组(将一个浮点数转为时间元组)
now_time_struct = time.localtime(now_stamp)
print(now_time_struct,type(now_time_struct)) # <class 'time.struct_time'>
# time.struct_time(tm_year=2021, tm_mon=5, tm_mday=4, tm_hour=7, tm_min=27, tm_sec=29, tm_wday=1, tm_yday=124, tm_isdst=0) -
-
time.asctime(tupletime):将时间元组转为字符串。import time
# 获取当前时间戳
now_stamp = time.time()
print(type(now_stamp)) # <class 'float'>
# 将当前时间戳转为时间元组(将一个浮点数转为时间元组)
now_time_struct = time.localtime(now_stamp)
print(now_time_struct,type(now_time_struct)) # <class 'time.struct_time'>
# time.struct_time(tm_year=2021, tm_mon=5, tm_mday=4, tm_hour=7, tm_min=27, tm_sec=29, tm_wday=1, tm_yday=124, tm_isdst=0)
read_time = time.asctime(now_time_struct)
print(read_time,type(read_time)) # <class 'str'>
# Tue May 4 07:31:31 2021
-
time.strftime(format[,tupletime]):格式化日期为指定形式。-
format:格式化符号-
%y:两位数的年份表示(00-99)
-
%Y:四位数的年份表示(0000-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-336)
-
%p:本地A.M 或者 P.M 的等价符
-
%U:一年中的星期数(00-53),星期天为星期的开始
-
%w:星期(0-6),星期天为星期的开始
-
%W:一年中的星期数(00-53),星期一为星期的开始
-
%x:本地相应的日期表示
-
%X:本地相应的时间表示
-
%Z:当前时区的名称
-
%%:%号本身
-
import time
"""
%y:年份(两位);%Y:年份(四位)
%m:月份(0-11);%a:本地简化月
%d:日期(0-30);%b:本地简化日
%H:24小数 ; %I:12小时
%M:分钟
%S:秒钟
"""
# 获取当前时间形式为:AM 07:45:43 2021/05/04 星期2
now_str = time.strftime("%p %I:%M:%S %Y/%m/%d %w")
print(now_str.split(' ')[0],now_str.split(' ')[1],now_str.split(' ')[2],f"星期{now_str.split(' ')[3]}")
# 获取当前时间形式为本地简化形式:
now_str = time.strftime("%a %b %I:%M %y")
print(now_str)
# 将一个浮点数--->转为时间格式化形式
format_time =time.strftime("%p %I:%M %Y:%m:%d weekday%w",time.localtime(1010020.21))
print(format_time) -
其他内置函数
-
time.sleep(secs):推迟调用线程的运行,secs为秒数。import time
# 设置当前线程睡眠时间,定位sec
start = time.time()
print("start")
time.sleep(2)
print("end")
runtime = time.time() - start
print("运行时间:",runtime)
-
time.localtime(timestamp):将时间戳转为时间元组。 -
time.mktime(tupletime):将时间元组转为时间戳。import time
# 获取当前的时间戳
now_timestamp = time.time()
print(now_timestamp)
# 将时间戳-->时间元组
now_tupletime = time.localtime(now_timestamp)
print(now_tupletime)
# 将时间元组-->时间戳
now_timestamp = time.mktime(now_tupletime)
print(now_timestamp)
calendar模块
-
calendar模块:格式化日历 -
星期一是默认的每周的第一天,星期天默认的最后一天。
-
导入
calendar模块:import calendar
calendar模块常用方法
-
calendar.month(year,month,w=2,l=1)-
返回一个多行字符串格式的
year年month月日历,两行标题,一周一行。每日宽度间隔为w字符,每行的长度为7*w+6。l是每星期的行数。
import calendar
# 返回指定年月的日历
print(calendar.month(2021,1)) -
其他内置函数
-
calendar.calendar(year,w=2,l=1,c=6):获取year年的日历,3个月一行,间隔距离为c;每日宽度间隔为w字符;每行长度为21*w+18+2*c;l是每星期行数。 -
calendar.firstweekday():返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,表示星期一。 -
calendar.isleep(year):是闰年返回True,否则返回False -
calendar.leapdays(y1,y2):返回在y1,y2两年之间的闰年总数。 -
calendar.prcal(year,w=2,l=1,c=6)<==>print(calendar.calendar(year,w=2,l=1,c=6)) -
calendar.prmonth(year.month,w=2,l=1)<==>print(calendar.month(year.month,w=2,l=1)) -
calendar.setfirstweekday(weekday):设置每周的起始日期码。0(星期一)到6(星期天) -
calendar.weekday(year,month,day):返回给定日期的日期码。0(星期一)到6(星期天)。月份为1(1月)到12(12月)
import calendar
# 获取某年的日历:
print(calendar.calendar(2021))
calendar.prcal(2021)
# 获取某年某月的日历:
print(calendar.month(2021,4))
calendar.prmonth(2021,4)
# 判断某年是否是闰年:是(True),不是(False)
print(calendar.isleap(2021))
# 返回在某年与某年之间的闰年总数。
print("闰年总数:",calendar.leapdays(2000,2021))
# 返回当前每周起始日期码:
print(calendar.firstweekday())
# 设置每周的起始日期码:
calendar.setfirstweekday(6)
# 返回当前每周起始日期码:
print(calendar.firstweekday())
# 返回给定日期的日期码:
print('2021-3-31的日期码:星期',calendar.weekday(2021,3,31)+1)
datetime模块
-
datetime模块:处理时间和日期的标准库 -
使用
datetime模块首先导入模块:from datetime import datetime-
第一个
datetime:是datetime模块-
当使用
from datetime import datetime导入类时,调用模块中的类不需要加模块的前缀。如:如果使用import datetime导入模块时,使用模块中的类的方法:datetime.datetime.function()
-
-
第二个
datetime:是datetime类-
调用其中的方法:
datetime.function(),即类名.方法名()
-
-
获取日期和时间
-
datetime.now():返回当前时间和日期。
from datetime import datetime
#获取当前时间和日期
print(datetime.now())
-
datetime(Y,M,D,h,m,s):获取指定时间和日期-
Y:年 如 2021年
-
M:月 如 3月
-
D:日 如 13日
-
h:时 如 4 点
-
m:分 如 39分
-
s:秒 如 45秒
-
#获取指定时间和日期
from datetime import datetime
print(datetime(2021,3,13,4,41))
datetime转换为timestamp
-
timestamp:从Python为0的时刻到当前时刻所经过的时间,为浮点数,整数位表示秒。 -
python的0时刻:
1970-1-1 00:00:00 UTC+0:00对应北京时间为1970-1-1 08:00:00 UTC+8:00 -
存储时间的方法:timestamp的值与时区无关,当timestamp确定时,其UTC时间也就确定了。
-
datetime-->timestamp:timestamp() -
时间戳:timestamp,<class 'float'>
#datetime转换为timestamp
from datetime import datetime
dt = datetime.now()
print("获取从1970-1-1 00:00:00 UTC+0:00开始到现在所经历的时间戳:",dt.timestamp())
timestamp转换为datetime
-
timestamp-->datetime:datetime.fromtimestamp() -
timestamp-->UTC标准时区:datetime.utcfromtimestamp()
#timestamp转换为datetime
from datetime import datetime
dt = datetime.now().timestamp()
print("当前时间(时区:北京):",datetime.fromtimestamp(dt))
print("当前时间(时区:UTC+0:00):",datetime.utcfromtimestamp(dt))
str转换为datetime
-
str-->datetime:datetime.strptime()-
参数1:时间和日期字符串
-
参数2:时间和日期的格式化字符串
-
#str转换为datetime
from datetime import datetime
# dt:当前时间戳
dt = datetime.now().timestamp()
# 当前时间
now_time = datetime.fromtimestamp(dt)
print(now_time)
# str-->datetime
str_format_now_time=datetime.strptime('2021-03-18 17:15:08','%Y-%m-%d %H:%M:%S')
print(str_format_now_time)
datetime转换为str
-
datetime-->str:datetime.strftime()-
参数:时间和日期的格式化字符串
-
# datetime转换为str
from datetime import datetime
dt = datetime.now()
print(dt.strftime('%a,%b %H:%M:%S'))
datetime加减
-
对时间和日期的加|减 《==》 把datetime往后|往前计算
-
加减可以使用
+|-运算符:前提需要导入timedelta类 -
timedelta():-
hours=+|- h:小时 +|- h
-
#datetime加减
from datetime import datetime,timedelta
start = datetime.now()
end = start + timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
print(end)
# help(timedelta)
本地时间转换为UTC时间
-
本地时间:系统设定时区的时间。
-
北京时间是UTC+8:00时区的时间
-
UTC时间是UTC+0:00时区的时间。
-
-
一个
datetime类型有一个时区属性tzinfo,默认为None,不知道是什么时区,要指定时区,则需要datetime设置一个时区。
from datetime import datetime,timedelta,timezone
tz_utc_8 = timezone(timedelta(hours=8)) #创建时区UTC+8:00
now = datetime.now() #获取当前时间
print(now)
print(datetime(2021,3,25,15,25,17,581310))
dt = now.replace(tzinfo=tz_utc_8) #强制设置为utc+8:00
print(dt)
print(datetime(2021,3,25,15,25,17,581310))
tzinfo = timezone(timedelta(0,28800))
print(tzinfo)
时区转换
-
首先,我们使用
utcnow()拿到当前的utc时间:utcnow() -
然后,再转换为任意时间:
from datetime import datetime,timedelta,timezone
# 拿到utc时间,并且强制设置时区为utc+8:00:
'''
utcnow():返回当前utc时间
replace():强制设置utc时间为tzinfo属性的值
'''
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
print(utc_dt)
# 然后,转换为任意时区的时间:
'''
astimezone():将时区转换为任意时区
'''
bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
print(bj_dt)
!:
-
datetime时,首先需要获得他正确的时区,然后强制设置时区,作为基准时间。 -
利用带时区的
datetime,通过astimezone()方法,可以转换到任意时区。 -
不是必须从
utc+0:00时区--->其他时区,任何带有时区的datetime都可以转换。
-
time模块:格式化时间 -
时间间隔:以 秒为单位的浮点数
-
时间戳:以自从 1970年1月1日午夜 经过多长时间来表示。
-
时间戳最适合存储,因为时间戳确定了,时区也就确定了。
-
-
导入
time模块:import time
time模块常用方法
-
time.time():获取当前时间戳。import time
# 获取当前时间戳
print(time.time())
-
tiem.localtime(float):将时间戳形式的浮点数转换为时间元组。-
时间元组: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是决定是否是夏令时的标志)
import time
# 获取当前时间戳
now_stamp = time.time()
print(type(now_stamp)) # <class 'float'>
# 将当前时间戳转为时间元组(将一个浮点数转为时间元组)
now_time_struct = time.localtime(now_stamp)
print(now_time_struct,type(now_time_struct)) # <class 'time.struct_time'>
# time.struct_time(tm_year=2021, tm_mon=5, tm_mday=4, tm_hour=7, tm_min=27, tm_sec=29, tm_wday=1, tm_yday=124, tm_isdst=0) -
-
time.asctime(tupletime):将时间元组转为字符串。import time
# 获取当前时间戳
now_stamp = time.time()
print(type(now_stamp)) # <class 'float'>
# 将当前时间戳转为时间元组(将一个浮点数转为时间元组)
now_time_struct = time.localtime(now_stamp)
print(now_time_struct,type(now_time_struct)) # <class 'time.struct_time'>
# time.struct_time(tm_year=2021, tm_mon=5, tm_mday=4, tm_hour=7, tm_min=27, tm_sec=29, tm_wday=1, tm_yday=124, tm_isdst=0)
read_time = time.asctime(now_time_struct)
print(read_time,type(read_time)) # <class 'str'>
# Tue May 4 07:31:31 2021
-
time.strftime(format[,tupletime]):格式化日期为指定形式。-
format:格式化符号-
%y:两位数的年份表示(00-99)
-
%Y:四位数的年份表示(0000-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-336)
-
%p:本地A.M 或者 P.M 的等价符
-
%U:一年中的星期数(00-53),星期天为星期的开始
-
%w:星期(0-6),星期天为星期的开始
-
%W:一年中的星期数(00-53),星期一为星期的开始
-
%x:本地相应的日期表示
-
%X:本地相应的时间表示
-
%Z:当前时区的名称
-
%%:%号本身
-
import time
"""
%y:年份(两位);%Y:年份(四位)
%m:月份(0-11);%a:本地简化月
%d:日期(0-30);%b:本地简化日
%H:24小数 ; %I:12小时
%M:分钟
%S:秒钟
"""
# 获取当前时间形式为:AM 07:45:43 2021/05/04 星期2
now_str = time.strftime("%p %I:%M:%S %Y/%m/%d %w")
print(now_str.split(' ')[0],now_str.split(' ')[1],now_str.split(' ')[2],f"星期{now_str.split(' ')[3]}")
# 获取当前时间形式为本地简化形式:
now_str = time.strftime("%a %b %I:%M %y")
print(now_str)
# 将一个浮点数--->转为时间格式化形式
format_time =time.strftime("%p %I:%M %Y:%m:%d weekday%w",time.localtime(1010020.21))
print(format_time) -
其他内置函数
-
time.sleep(secs):推迟调用线程的运行,secs为秒数。import time
# 设置当前线程睡眠时间,定位sec
start = time.time()
print("start")
time.sleep(2)
print("end")
runtime = time.time() - start
print("运行时间:",runtime)
-
time.localtime(timestamp):将时间戳转为时间元组。 -
time.mktime(tupletime):将时间元组转为时间戳。import time
# 获取当前的时间戳
now_timestamp = time.time()
print(now_timestamp)
# 将时间戳-->时间元组
now_tupletime = time.localtime(now_timestamp)
print(now_tupletime)
# 将时间元组-->时间戳
now_timestamp = time.mktime(now_tupletime)
print(now_timestamp)
calendar模块
-
calendar模块:格式化日历 -
星期一是默认的每周的第一天,星期天默认的最后一天。
-
导入
calendar模块:import calendar
calendar模块常用方法
-
calendar.month(year,month,w=2,l=1)-
返回一个多行字符串格式的
year年month月日历,两行标题,一周一行。每日宽度间隔为w字符,每行的长度为7*w+6。l是每星期的行数。
import calendar
# 返回指定年月的日历
print(calendar.month(2021,1)) -
其他内置函数
-
calendar.calendar(year,w=2,l=1,c=6):获取year年的日历,3个月一行,间隔距离为c;每日宽度间隔为w字符;每行长度为21*w+18+2*c;l是每星期行数。 -
calendar.firstweekday():返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,表示星期一。 -
calendar.isleep(year):是闰年返回True,否则返回False -
calendar.leapdays(y1,y2):返回在y1,y2两年之间的闰年总数。 -
calendar.prcal(year,w=2,l=1,c=6)<==>print(calendar.calendar(year,w=2,l=1,c=6)) -
calendar.prmonth(year.month,w=2,l=1)<==>print(calendar.month(year.month,w=2,l=1)) -
calendar.setfirstweekday(weekday):设置每周的起始日期码。0(星期一)到6(星期天) -
calendar.weekday(year,month,day):返回给定日期的日期码。0(星期一)到6(星期天)。月份为1(1月)到12(12月)
import calendar
# 获取某年的日历:
print(calendar.calendar(2021))
calendar.prcal(2021)
# 获取某年某月的日历:
print(calendar.month(2021,4))
calendar.prmonth(2021,4)
# 判断某年是否是闰年:是(True),不是(False)
print(calendar.isleap(2021))
# 返回在某年与某年之间的闰年总数。
print("闰年总数:",calendar.leapdays(2000,2021))
# 返回当前每周起始日期码:
print(calendar.firstweekday())
# 设置每周的起始日期码:
calendar.setfirstweekday(6)
# 返回当前每周起始日期码:
print(calendar.firstweekday())
# 返回给定日期的日期码:
print('2021-3-31的日期码:星期',calendar.weekday(2021,3,31)+1)
datetime模块
-
datetime模块:处理时间和日期的标准库 -
使用
datetime模块首先导入模块:from datetime import datetime-
第一个
datetime:是datetime模块-
当使用
from datetime import datetime导入类时,调用模块中的类不需要加模块的前缀。如:如果使用import datetime导入模块时,使用模块中的类的方法:datetime.datetime.function()
-
-
第二个
datetime:是datetime类-
调用其中的方法:
datetime.function(),即类名.方法名()
-
-
获取日期和时间
-
datetime.now():返回当前时间和日期。
from datetime import datetime
#获取当前时间和日期
print(datetime.now())
-
datetime(Y,M,D,h,m,s):获取指定时间和日期-
Y:年 如 2021年
-
M:月 如 3月
-
D:日 如 13日
-
h:时 如 4 点
-
m:分 如 39分
-
s:秒 如 45秒
-
#获取指定时间和日期
from datetime import datetime
print(datetime(2021,3,13,4,41))
datetime转换为timestamp
-
timestamp:从Python为0的时刻到当前时刻所经过的时间,为浮点数,整数位表示秒。 -
python的0时刻:
1970-1-1 00:00:00 UTC+0:00对应北京时间为1970-1-1 08:00:00 UTC+8:00 -
存储时间的方法:timestamp的值与时区无关,当timestamp确定时,其UTC时间也就确定了。
-
datetime-->timestamp:timestamp() -
时间戳:timestamp,<class 'float'>
#datetime转换为timestamp
from datetime import datetime
dt = datetime.now()
print("获取从1970-1-1 00:00:00 UTC+0:00开始到现在所经历的时间戳:",dt.timestamp())
timestamp转换为datetime
-
timestamp-->datetime:datetime.fromtimestamp() -
timestamp-->UTC标准时区:datetime.utcfromtimestamp()
#timestamp转换为datetime
from datetime import datetime
dt = datetime.now().timestamp()
print("当前时间(时区:北京):",datetime.fromtimestamp(dt))
print("当前时间(时区:UTC+0:00):",datetime.utcfromtimestamp(dt))
str转换为datetime
-
str-->datetime:datetime.strptime()-
参数1:时间和日期字符串
-
参数2:时间和日期的格式化字符串
-
#str转换为datetime
from datetime import datetime
# dt:当前时间戳
dt = datetime.now().timestamp()
# 当前时间
now_time = datetime.fromtimestamp(dt)
print(now_time)
# str-->datetime
str_format_now_time=datetime.strptime('2021-03-18 17:15:08','%Y-%m-%d %H:%M:%S')
print(str_format_now_time)
datetime转换为str
-
datetime-->str:datetime.strftime()-
参数:时间和日期的格式化字符串
-
# datetime转换为str
from datetime import datetime
dt = datetime.now()
print(dt.strftime('%a,%b %H:%M:%S'))
datetime加减
-
对时间和日期的加|减 《==》 把datetime往后|往前计算
-
加减可以使用
+|-运算符:前提需要导入timedelta类 -
timedelta():-
hours=+|- h:小时 +|- h
-
#datetime加减
from datetime import datetime,timedelta
start = datetime.now()
end = start + timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
print(end)
# help(timedelta)
本地时间转换为UTC时间
-
本地时间:系统设定时区的时间。
-
北京时间是UTC+8:00时区的时间
-
UTC时间是UTC+0:00时区的时间。
-
-
一个
datetime类型有一个时区属性tzinfo,默认为None,不知道是什么时区,要指定时区,则需要datetime设置一个时区。
from datetime import datetime,timedelta,timezone
tz_utc_8 = timezone(timedelta(hours=8)) #创建时区UTC+8:00
now = datetime.now() #获取当前时间
print(now)
print(datetime(2021,3,25,15,25,17,581310))
dt = now.replace(tzinfo=tz_utc_8) #强制设置为utc+8:00
print(dt)
print(datetime(2021,3,25,15,25,17,581310))
tzinfo = timezone(timedelta(0,28800))
print(tzinfo)
时区转换
-
首先,我们使用
utcnow()拿到当前的utc时间:utcnow() -
然后,再转换为任意时间:
from datetime import datetime,timedelta,timezone
# 拿到utc时间,并且强制设置时区为utc+8:00:
'''
utcnow():返回当前utc时间
replace():强制设置utc时间为tzinfo属性的值
'''
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
print(utc_dt)
# 然后,转换为任意时区的时间:
'''
astimezone():将时区转换为任意时区
'''
bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
print(bj_dt)
!:
-
datetime时,首先需要获得他正确的时区,然后强制设置时区,作为基准时间。 -
利用带时区的
datetime,通过astimezone()方法,可以转换到任意时区。 -
不是必须从
utc+0:00时区--->其他时区,任何带有时区的datetime都可以转换。 -
浙公网安备 33010602011771号