热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python教程分享Python标准库之日期、时间和日历模块

一、time时间模块importtime1、时间戳:time.time()时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。时间

一、time时间模块

import time

1 、时间戳:time.time()

时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。

时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,unix和windows只支持到2038年。

time_stamp = time.time()  print(time_stamp, type(time_stamp))  # 1574923359.1739607 

2、 格式化时间:time.strftime()

格式化的时间字符串(format string):格式化时间表示的是普通的字符串格式的时间。

format_time = time.strftime("%y-%m-%d %x")  print(format_time, type(format_time)) #2019-03-07 16:22:11     # 格式化成2016-03-20 11:45:39形式  print (time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))

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 当前时区的名称
  • %% %号本身

3 、结构化时间:time.localtime()

结构化的时间(struct time):struct_time元组共有9个元素共九个元素,分别为(年,月,日,时,分,秒,一年中第几周(0是周一),一年中第几天,夏令时)

# utc时区的struct_time:  print(time.gmtime() )  # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=28, tm_hour=6, tm_min=45, tm_sec=34, tm_wday=3, tm_yday=332, tm_isdst=0)    # 本地时区的struct_time:   print( time.localtime() )  # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=28, tm_hour=14, tm_min=45, tm_sec=34, tm_wday=3, tm_yday=332, tm_isdst=0)    #  获取当前时间  print( time.localtime(time.time())  # 结构化时间的基准时间  print(time.localtime(0) )  # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)    # 结构化时间的基准时间上增加一年时间  print(time.localtime(3600 * 24 * 365) )  # time.struct_time(tm_year=1971, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=1, tm_isdst=0)

4、 不同格式时间的转换

Python标准库之日期、时间和日历模块

如上图所示,我们总能通过某些方法在结构化时间-格式化时间-时间戳三者之间进行转换,下面我们将用代码展示如何通过这些方法转换时间格式。

# 结构化时间  now_time = time.localtime()  print(now_time)  # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=28, tm_hour=14, tm_min=51, tm_sec=55, tm_wday=3, tm_yday=332, tm_isdst=0)    # 把结构化时间转换为时间戳格式  print(time.mktime(now_time))  # 1574923915.0    # 把结构化时间转换为格式化时间  # %y年-%m月-%d天 %x时分秒=%h时:%m分:%s秒  print(time.strftime("%y-%m-%d %x", now_time) )  # 2019-11-28 14:51:55    # 把格式化时间化为结构化时间,它和strftime()是逆操作  print(time.strptime('2013-05-20 13:14:52', '%y-%m-%d %x') )  # time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=14, tm_sec=52, tm_wday=0, tm_yday=140, tm_isdst=-1)

5、 其他用法

# 把结构化时间表示为这种形式(24个字符的字符串):'sun jun 20 23:21:05 1993'。  print(time.asctime() )  # thu nov 28 14:51:55 2019    # 如果没有参数,默认会将time.localtime()作为参数传入。  print(time.asctime(time.localtime()) )  # thu nov 28 14:51:55 2019    # 把一个时间戳转化为这种形式(24个字符的字符串):'sun jun 20 23:21:05 1993'。  print(time.ctime() )  # thu nov 28 14:51:55 2019    # 如果参数未给或者为none的时候,默认会将time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。  print(time.ctime(time.time()))  # thu nov 28 14:51:55 2019      # 推迟指定的时间运行,单位为秒  start = time.time()  time.sleep(3)  end = time.time()    print(end-start) #3.0005428791046143      time.perf_counter()  # 返回系统运行时间  time.process_time()  # 返回进程运行时间

二、datetime时间加减的模块

datetime模块可以看成是时间加减的模块

import datetime

1、用法:

import datetime  import time    # 返回当前时间  print(datetime.datetime.now() )  # 2019-11-28 15:02:23.138960  print(datetime.date.fromtimestamp(time.time()) )  # 2019-11-28    # 当前时间+3天  print(datetime.datetime.now() + datetime.timedelta(3) )  # 2019-12-01 15:02:23.138960    # 当前时间-3天  print(datetime.datetime.now() + datetime.timedelta(-3))  # 2019-11-25 15:02:23.138960  # 当前时间-3小时  print(datetime.datetime.now() + datetime.timedelta(hours=3)  )  # 2019-11-28 18:02:23.138960  # 当前时间+30分钟  print(datetime.datetime.now() + datetime.timedelta(minutes=30) )  # 2019-11-28 15:32:23.138960    # 时间替换  c_time = datetime.datetime.now()  print(c_time.replace(minute=20, hour=5, secOnd=13))  # 2019-11-28 05:20:13.138960

2、常用时间处理方法

  • 今天: today = datetime.date.today()
  • 昨天: yesterday = today - datetime.timedelta(days=1)
  • 上个月: last_mOnth= today.month - 1 if today.month - 1 else 12
  • 当前时间戳: time_stamp = time.time()
  • 时间戳转datetime: datetime.datetime.fromtimestamp(time_stamp)
  • datetime转时间戳: int(time.mktime(today.timetuple()))
  • datetime转字符串: today_str = today.strftime("%y-%m-%d")
  • 字符串转datetime: today = datetime.datetime.strptime(today_str, "%y-%m-%d")
  • 补时差: today + datetime.timedelta(hours=8)

三、calendar日历模块

calendar模块有很广泛的方法用来处理年历和月历,例如打印某月的月历:

import calendar    cal = calendar.month(2016, 1)  print ("以下输出2016年1月份的日历:")  print (cal)

以上实例输出结果:

以下输出2016年1月份的日历:      january 2016  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

星期一是默认的每周第一天,星期天是默认的最后一天。更改设置需调用calendar.setfirstweekday()函数。

农历:

安装方法:

pip install sxtwl

windows下的二进制安装包:https://pan.baidu.com/s/1vr4mtpvv9ip9sshndjkznq#list/path=%2fsxtwl

# 引入日历库模块  import sxtwl    # 日历中文索引  ymc = ["十一", "腊", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十"]  rmc = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九",         "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"]  # 实例化日历库  lunar = sxtwl.lunar()    # 阴历转阳历  day = lunar.getdaybylunar(2030, 3, 27, false)  # 公元前的年可以用负数表示。比如公交前20年就用-20    print(u"公历:", day.y, u"年", day.m, u"月", day.d, u"日")  if day.lleap:      print(u"阴历:润", ymc[day.lmc], u"月", rmc[day.ldi], u"日")  else:      print(u"阴历:", ymc[day.lmc], u"月", rmc[day.ldi], u"日")    # 同理,阳历转阴历  day = lunar.getdaybysolar(2018, 10, 20)    print(u"公历:", day.y, u"年", day.m, u"月", day.d, u"日")  if day.lleap:      print(u"阴历:润", ymc[day.lmc], u"月", rmc[day.ldi], u"日")  else:      print(u"阴历:", ymc[day.lmc], u"月", rmc[day.ldi], u"日")

更加详细的使用方法请参考:

https://pypi.org/project/sxtwl/

到此这篇关于python标准库之日期、时间和日历模块的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持<编程笔记>。

需要了解更多python教程分享Python标准库之日期、时间和日历模块,都可以关注python教程分享栏目&#8212;编程笔记


推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
author-avatar
月夜清风XL
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有