Python标准库之日期、时间和日历模块
作者:springsnow 发布时间:2021-04-11 17:05:14
一、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 <class 'float'>
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 <class 'str'>
# 格式化成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、 不同格式时间的转换
如上图所示,我们总能通过某些方法在结构化时间-格式化时间-时间戳三者之间进行转换,下面我们将用代码展示如何通过这些方法转换时间格式。
# 结构化时间
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/
来源:https://www.cnblogs.com/springsnow/p/11953440.html


猜你喜欢
- 在Python3.6提供f-Strings新的字符串格式化语法。不仅更加可读、简洁,相比其他方式也不易造成错误,而且还更快。看完本文你将学习
- SQL中的declare用法平时写SQL查询、存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天
- 学习自然语言的最好方法就是溶入相应的语言环境在交流中学习,学习一种编程语言的最好方法就是看例程。为了帮助大家建立wml应用的第一印象,所以请
- 变量ECMAScript变量是松散类型,意思就是说变量可以保存任何类型的数据,每个变量只不过是用于保存任意值的命名占位符。在JavaScri
- 优化数据库的注意事项:1、关键字段建立索引。2、使用存储过程,它使SQL变得更加灵活和高效。3、备份数据库和清除垃圾数据。4、SQL语句语法
- 加密解密字符串的asp函数,如用于ASP链接地址栏参数的加密,看代码就明白。比如:show.asp?id=DB26538FA54C70E1E
- bs4解析原理:1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中2.通过调用BeautifulSoup对象中相
- 导入所需库%matplotlib inlineimport sympyimport numpy as npimport matplotlib
- 主题介绍pyecharts里面有很多的主题可以供我们选择,我们可以根据自己的需要完成主题的配置,这样就告别了软件的限制,可以随意的发挥自己的
- CreateOrUpdate 是业务开发中很常见的场景,我们支持用户对某个业务实体进行创建/配置。希望实现的 repository 接口要达
- JavaScript substr 方法substr 方法用于根据开始位置和长度截取字符串并返回截取部分字符串。其语法如下:str_obje
- bootstrap中有alert组件,如果点击关闭按钮后该组件会被删除而不是被隐藏,想再显示怎么办呢?bootstrap-alert.js源
- 阅读目录什么是PrmoisePromise的使用最近在看《你不知道的javascript中卷》,发觉作者花了基本一半的篇幅去讲异步和prom
- 本文实例讲述了javascript中createElement的两种创建方式。分享给大家供大家参考。具体实现方法如下:<html xm
- 工作中会遇到这样的需求,有多个Excel的格式一样,都有多个sheet,且每个sheet的名字和格式一样,我们需要按照sheet 合并,就是
- 一 pandas DataFrame一列赋值问题说明,把b的列赋值给a情况1:a,b index设置相同如下代码import pandas
- MySQL存储过程SAVEPOINT ROLLBACK to示例如下:DELIMITER $$DROP PROCEDURE IF EXIST
- 最近一直在更新Java新特性和IDEA Tips两个专栏,其他方向内容的动态关注少了。昨天天晚上刷推的时候,瞄到了这个神奇的东西,觉得挺co
- python命名规则命名风格python几种不同命名风格驼峰式命名法(WjW)混合式命名法(wjWj)大写(WJWJWJ)或大写加下划线(W
- 一对多(ForeignKey)class ForeignKey(ForeignObject): def __init__(sel