python标准库--datetime模块

time模块

  • 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)

    • 返回一个多行字符串格式的yearmonth月日历,两行标题,一周一行。每日宽度间隔为w字符,每行的长度为7*w+6l是每星期的行数。

    import calendar
    # 返回指定年月的日历
    print(calendar.month(2021,1))

其他内置函数

  • calendar.calendar(year,w=2,l=1,c=6):获取year年的日历,3个月一行,间隔距离为c;每日宽度间隔为w字符;每行长度为21*w+18+2*cl 是每星期行数。

  • 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-->timestamptimestamp()

  • 时间戳: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-->datetimedatetime.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-->datetimedatetime.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-->strdatetime.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模块

  • 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)

    • 返回一个多行字符串格式的yearmonth月日历,两行标题,一周一行。每日宽度间隔为w字符,每行的长度为7*w+6l是每星期的行数。

    import calendar
    # 返回指定年月的日历
    print(calendar.month(2021,1))

其他内置函数

  • calendar.calendar(year,w=2,l=1,c=6):获取year年的日历,3个月一行,间隔距离为c;每日宽度间隔为w字符;每行长度为21*w+18+2*cl 是每星期行数。

  • 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-->timestamptimestamp()

  • 时间戳: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-->datetimedatetime.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-->datetimedatetime.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-->strdatetime.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都可以转换。

  •  

posted on 2021-05-04 08:40  拾亿~  阅读(335)  评论(0)    收藏  举报

导航