python日期函数库,python标准库datetime
本文介绍了Python标准库的日期、时间和日历模块,并通过示例代码对其进行了详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
一、time时间模块
导入时间
1 、时间戳:time.time()
Timestamp: Timestamp表示从1970年1月1日开始以秒计算的偏移量,00:0336000。
时间戳单元最适合日期操作。但是1970年以前的日期不能用这个来表示。甚至不太远。UNIX和Windows仅支持到2038年。
time_stamp=time.time()
print(time_stamp,type(time _ stamp))# 157492359.1739607 class float
2、 格式化时间:time.strftime()
格式化时间字符串:格式化时间表示普通字符串格式的时间。
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)。简化月份名称%B本地完整月份名称%c本地对应日期和时间表示法%j年中的某一天(001-366)%p本地相当于上午或下午%U一年中的周数(00-53)星期日是一周的开始%w周(0-6),星期日是一周的开始。
结构化时间:struct _ time元组有九个元素,分别是(年、月、日、小时、分钟、秒、一年中的周(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 . local time())# 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 . local time(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 . local time(3600 * 24 * 365))# time . struct _ time(TM _ year=1971,tm_mon=1,tm_mday=1,tm_hour=8,tm_min=0,tm_sec=0,t
m_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 datetimeimport 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 calendarcal = 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标准库之日期、时间和日历模块的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。