python时间函数的使用

Posted 月疯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python时间函数的使用相关的知识,希望对你有一定的参考价值。


Python时间与日期操作(datetime、time、calendar)

 相关模块

模块说明
timetime是一个仅包含与日期和时间相关的函数和常量的模块,在本模块中定义了C/C++编写的几个类。例如,struct_time类
datetimedatetime是一个使用面向对象编程设计的模块,可以在Python中使用日期和时间。它定义了几个表示日期和时间的类
calendar日历是一个提供函数的模块,以及与Calendar相关的几个类,它们支持将日历映像生成为text,html,….
locale该模块包含用于格式化或基于区域设置分析日期和时间的函数。

UTC(CoordinatedUniversal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。

DST(DaylightSaving Time)即夏令时。是一种为节约能源而人为规定地方时间的制度,一般在天亮早的夏季人为将时间提前一小时

struct_time结构:

索引字段
0tm_year2018,2019…
1tm_mon 1 ~ 12
2tm_mday1 ~ 31
3tm_hour0 ~ 23
4tm_min0 ~ 59
5tm_sec0 ~ 61(60或61是闰秒)
6tm_wday0 ~ 6(0是星期一)
7tm_yday1 ~ 366(朱利安日)
8tm_isdst1,0,1,-1是决定是否为夏令时的旗帜
#自定义日期格式
def gestime():
    t=time.struct_time(tm_year=2021,tm_mon=11,tm_mday=21,tm_hour=12,tm_min=34,tm_sec=21,tm_wday=2,tm_yday=110,tm_isdst=0)
    print(t)

提示:

t=time.struct_time(tm_year=2021,tm_mon=11,tm_mday=21,tm_hour=12,tm_min=34,tm_sec=21,tm_wday=2,tm_yday=110,tm_isdst=0)
TypeError: structseq() takes at most 2 keyword arguments (9 given) 

由于自己写的不够真实,我们利用datetime生成一个

def gestime():
    tt=datetime.datetime(2000, 11, 30, 0, 0, 0).timetuple()
    print(tt)

 会输出一个:

time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)

time模块

   time模块,它提供了处理时间和表示之间转换的功能。help(time)之后可以知道time有2种时间表示形式:

        1、时间戳表示法,即以整型或浮点型表示的是一个以秒为单位的时间间隔。这个时间的基础值是从1970年的1月1号零点开始算起。

        2、元组格式表示法,这个元组有9个整型内容。分别表示不同的时间含义。

编号方法描述
1time.time()返回当前时间时刻,浮点数形式秒数,不支持参数
2time.clock()返回当前程序的cpu执行时间。为了测量不同方法的计算成本,time.clock的值比time.time()的值更有用。unix系统始终返回全部运行时间;而windows从第二次开始都是以第一次调用此函数时的时间戳作为基准
3time.sleep(secs)暂停调用线程secs秒,接受整型和浮点型参数。
4time.gmtime([secs])将时间戳转换为UTC时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。
5time.localtime([secs])将时间戳转换为本地时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。
6time.asctime([tupletime])接受时间元组,并返回一个可读的24个字符的字符串,例如’Tue Dec 11 22:07:14 2019’,默认值为localtime()返回值。
7time.ctime([secs])接受时间戳,转换为字符串。其默认值为当前时间戳。函数等价于asctime(localtime(seconds))。
8time.mktime(tupletime)将本地时间元组,转换为时间戳(浮点值,该时间点以秒为单位表示。)。接受一个时间元组,必选。
9time.strftime(fmt[,tupletime])将时间元组以指定的格式(字符串fmt指定)转换为字符串形式。接受字符串格式化串、时间元组。时间元组为可选,默认为localtime()
10time.strptime(str,fmt="")

根据格式字符串fmt解析str,并返回元组格式的时间。

strftime()的逆向过程。接受字符串,时间格式2个参数,都是必选

11time.altzone本地DST时区的偏移量(以秒为单位的UTC)。
12time.tzset()改变本地时区

 自定义格式:

格式  含义  备注
%a  本地(locale)简化星期名称
%A  本地完整星期名称
%b  本地简化月份名称
%B  本地完整月份名称
%c  本地相应的日期和时间表示
%d  一个月中的第几天(01 - 31)
%H  一天中的第几个小时(24小时制,00 - 23)
%I  第几个小时(12小时制,01 - 12)
%j  一年中的第几天(001 - 366)
%m  月份(01 - 12)
%M  分钟数(00 - 59)
%p  本地am或者pm的相应符
%S  秒(01 - 61)
%U  一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w  一个星期中的第几天(0 - 6,0是星期天)
%W  和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x  本地相应日期
%X  本地相应时间
%y  去掉世纪的年份(00 – 99)
%Y  完整的年份
%Z  时区的名字(如果不存在为空字符)
%%  ‘%’字符

 time模块重要属性

序号属性说明
1time.timezoneUTC和本地时区(不含DST)之间的偏移量,以秒计
2time.tzname关于(标准时区名称, 夏令时时区名称)的元组
3time.altzone当地夏令时时间与标准UTC时间的误差,以秒计
4time.daylight当地时间是否反映夏令时,默认为0
#自定义日期格式
def gestime():

    # 获取当前本地时间(生成一个字符串时间)
    localtime = time.localtime(time.time())
    print("Local current time :", localtime)

    # 当前时间格式化(字符串时间格式化,可以分别获取年月日,时分秒)
    curtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    print(curtime)
    # 也可以使用asctime()进行时间格式化
    print(time.asctime(localtime))

输出: 

Local current time : time.struct_time(tm_year=2021, tm_mon=12, tm_mday=16, tm_hour=21, tm_min=27, tm_sec=0, tm_wday=3, tm_yday=350, tm_isdst=0)
2021-12-16 21:27:00
Thu Dec 16 21:27:00 2021

Process finished with exit code 0

Calendar模块

calendar模块提供与日历相关的功能,包括为给定的月份或年份打印文本日历的功能。

以下是calendar模块可用的功能函数列表

序号函数描述
1Calendar(year,w = 2,l = 1,c = 6)返回一个具有年份日历的多行字符串格式化为三列,以c个空格分隔。 w是每个日期的字符宽度;每行的长度为21 * w + 18 + 2 * c,l是每周的行数。
2firstweekday( )返回当前设置每周开始的星期。默认情况下,当日历首次导入时设置为:0,表示为星期一。
3isleap(year)如果给定年份(year)是闰年则返回True;否则返回:False。
4leapdays(y1,y2)返回在范围(y1,y2)内的年份中的闰年总数。
5Month(year,month,w = 2,l = 1)返回一个多行字符串,其中包含年份月份的日历,每周一行和两个标题行。 w是每个日期的字符宽度;每行的长度为7 * w + 6。 l是每周的行数
6Monthcalendar(year,month)返回int类型的列表。每个子列表表示一个星期。年份月份以外的天数设置为0;该月内的日期设定为月份的第几日:1 ~ 31
7Monthrange(year,month)返回两个整数。第一个是年度月(month)的星期几的代码;第二个是当月的天数。表示星期几为0(星期一)至6(星期日);月份是1到12
8Prcal(year,w = 2,l = 1,c = 6)类似于:calendar.calendar(year,w,l,c)的打印
9Prmonth(year,month,w = 2,l = 1)类似于:calendar.month(year,month,w,l)的打印
10setfirstweekday(weekday)将每周的第一天设置为星期几的代码。星期几的代码为0(星期一)至6(星期日)。
11timegm(tupletime)time.gmtime的倒数:以时间元组的形式接受时刻,并返回与从时代(epoch)开始的浮点数相同的时刻。
12weekday(year,month,day)返回给定日期的星期几的代码。星期几的代码为0(星期一)至6(星期日);月数是1(1月)到12(12月)。
#自定义日期格式
def gestime():
    import calendar
    cal = calendar.month(2018, 10);
    print(cal)
2019 10 20
    October 2018
Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31


Process finished with exit code 0

datetime的用法: datetime是Python处理日期和时间的标准库。

#分别获取年月日
def test01():
    year = datetime.datetime.today().year
    month = datetime.datetime.today().month
    day = datetime.datetime.today().day
    print(',,'.format(year,month,day))

# 计算两个日期相差多少天
    d1 = date(2018, 10, 18);
    d2 = date(2017, 12, 31);

    print((d1 - d2).days);
# 当前日期
    curdate = date.today();
    print(curdate )

curdate = 2021-12-16 

# 计算十天之后的日期时间
    nowday = datetime.now();
    # timedelta类可以很容易地算出前几天和后几天的时刻。(timedelta(days= d, hours= h))
    # 还可以查看第几周对应的时间,例如:timedelta(weeks=20) 20周将被自动转化为天数
    # 前几天时刻,用减法。  后几天时刻,则用当前时间加上timedelta(days = d, hours= h)
    lastday = nowday + timedelta(days=10);
    print(str(lastday));
    print(lastday.ctime());  # ctime()  返回一个表示日期和时间的字符串。

    # 查看某一天是今年的第几天和第几周
    testday = date(2017, 8, 31);
    print(testday.isocalendar());  # isocalendar() 函数返回三元组    分别为:年份,周数,周几
    print(testday.timetuple());  # timetuple()  返回时间元祖

 2018-11-11 10:40:01.641845

Sun Nov 11 10:40:01 2018

(2017, 35, 4)

参考:Python时间与日期操作(datetime、time、calendar) - 阳光宝贝-沐沐 - 博客园 (cnblogs.com)https://www.cnblogs.com/pinpin/p/9882852.html 

以上是关于python时间函数的使用的主要内容,如果未能解决你的问题,请参考以下文章

13 个非常有用的 Python 代码片段

常用python日期日志获取内容循环的代码片段

使用 Python 代码片段编写 LaTeX 文档

Python代码阅读(第26篇):将列表映射成字典

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

Python 向 Postman 请求代码片段