写点什么

Python 开发中,日期时间的相关处理

作者:EquatorCoco
  • 2024-08-24
    福建
  • 本文字数:5182 字

    阅读完需:约 17 分钟

在 Python 开发中,日期和时间处理是一个常见的需求。Python 提供了多种模块和方法来处理日期和时间,以下是一些常用的模块和操作。通过介绍一些系统的 Python 类库以及第三方的类库,我们可以快速的实现各种时间日期历法节气等相关信息的处理。


1、系统内置日期时间模块


1) datetime 模块


datetime 是 Python 中处理日期和时间的主要模块。它提供了多个类,如 datetimedatetimetimedelta, 和 tzinfo


from datetime import datetime
now = datetime.now()print(now) # 当前日期和时间
复制代码


获取当前日期


today = datetime.today().date() print(today) # 只包含日期部分
复制代码


日期和时间的格式化


formatted = now.strftime("%Y-%m-%d %H:%M:%S")print(formatted)  # 以指定格式输出
复制代码


解析字符串为日期


date_str = "2024-08-23 10:15:00"date_obj = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")print(date_obj)
复制代码


2)time 模块


time 模块主要用于处理时间戳和延迟操作。


获取当前时间戳


import time
timestamp = time.time()print(timestamp) # 当前时间戳
复制代码


延迟执行


time.sleep(5)  # 程序暂停5秒
复制代码


3)calendar 模块


calendar 模块提供了与日历相关的功能,比如生成日历、判断闰年等。


生成某个月的日历


import calendar
year = 2024month = 8print(calendar.month(year, month))
复制代码


判断是否为闰年


is_leap = calendar.isleap(2024)print(is_leap)  # 输出: True
复制代码


让我们来看看我汇总的一些测试例子,以及它们的输出


import time  # 引入time模块import calendar  # 引入calendar模块from datetime import datetime  # 引入datetime模块
ticks = time.time()print("当前时间戳为:", ticks)
# Python函数用一个元组装起来的9组数字处理时间:localtime = time.localtime(time.time())print("本地时间为 :", localtime)
# 格式化日期:localtime = time.asctime(time.localtime(time.time()))print("本地时间为 :", localtime)

# 格式化日期:localtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())print("本地时间为 :", localtime)
print(time.strftime("%b %B", time.localtime()))
print("判断是否为闰年:{0}".format(calendar.isleap(2000))) # 判断是否为闰年print( "计算2000年到2020年有多少个闰年:{0}".format(calendar.leapdays(2000, 2020))) # 计算2000年到2020年有多少个闰年
复制代码



我们还可以根据需要组合一些函数来实现更加强大的日期处理。


# 中文月份和星期字符串ch_month_names = [    "一月",    "二月",    "三月",    "四月",    "五月",    "六月",    "七月",    "八月",    "九月",    "十月",    "十一月",    "十二月",]ch_week_names = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]

def chinese_calendar(year, month): cal = calendar.month(year, month) lines = cal.split("\n") ch_lines = [ch_week_names[:]] for line in lines[2:]: # 跳过前两行非日期信息 ch_lines.append([i if i != " " else "" for i in line.split()]) return ch_month_names[month - 1], ch_lines

print()# 获取当前年月now = datetime.now()year, month = now.year, now.monthweekname = ch_week_names[now.weekday()]
复制代码


# 打印当前月份的中文日历month_name, ch_calendar = chinese_calendar(year, month)print(f"{year}年{month_name}, {weekname}\n")
复制代码


输出结果


2024年八月, 星期五
复制代码


组合一些扩展的函数处理,我们还可以进行农历年、节气的处理,如下所示。


今天是2024年8月23日 星期五 农历甲辰[龙]年七月廿十 今日节气:#处暑#
复制代码

 

2、第三方日期时间处理库


Python 第三方库非常多也非常方便,我们可以根据自己需要选择一些比较优秀的第三方库来处理日期和时间的问题。


pytz 是一个第三方库,用于处理时区转换。


from datetime import datetimeimport pytz
tz = pytz.timezone("Asia/Shanghai")now_shanghai = datetime.now(tz)print(now_shanghai) # 输出当前时间,带时区信息
# 输出带时区的时间print(now_shanghai.strftime("%Y-%m-%d %H:%M:%S %Z%z"))
# 输出不带时区的时间print(now_shanghai.astimezone(pytz.utc).strftime("%Y-%m-%d %H:%M:%S"))
复制代码


输出信息


2024-08-23 10:52:56.794000+08:002024-08-23 10:52:56 CST+08002024-08-23 02:52:56
复制代码

 

dateutil 是另一个功能强大的第三方库,提供了日期解析、相对时间计算等高级功能。


解析日期字符串


from dateutil import parser
date = parser.parse("August 23, 2024 10:15 AM")print(date)
复制代码

 

处理相对时间


from dateutil.relativedelta import relativedelta
next_month = now + relativedelta(months=+1)print(next_month) # 当前时间加一个月
复制代码


输出信息如下所示。


2024-08-23 10:15:002024-09-23 10:51:47.368256
复制代码

 

在 Python 中,还有一些类似于 JavaScript 的 moment.js 或 day.js 的第三方库,用于简化日期和时间的处理。以下是几个常用的库:


. Pendulum


Pendulum 是一个更高级的 datetime 替代品,具有更直观和人性化的 API,同时内置时区处理和格式化功能。


import pendulum
# 获取当前时间now = pendulum.now()print(now) # 带有时区信息
# 创建特定日期时间specific_date = pendulum.datetime(2024, 8, 23, 10, 15)print(specific_date)
# 时间差的表示diff = specific_date.diff(now)print(diff.in_days()) # 输出差异的天数
# 格式化日期formatted = now.to_formatted_date_string()print(formatted) # 输出: Aug 23, 2024
复制代码


Arrow


Arrow 是另一个灵活的日期处理库,提供了更加简洁的 API 来处理常见的日期和时间操作。


import arrow
# 获取当前时间now = arrow.now()print(now)
# 解析日期字符串date = arrow.get("2024-08-23 10:15:00", "YYYY-MM-DD HH:mm:ss")print(date)
# 格式化日期formatted = date.format("YYYY-MM-DD HH:mm:ss")print(formatted)
# 时区转换utc = arrow.utcnow()local = utc.to("America/New_York")print(local)
复制代码


Maya


Maya 是一个简单而强大的库,旨在简化日期和时间的使用,尤其是在处理相对时间和自然语言输入时。


import maya
# 获取当前时间now = maya.now()print(now)
# 解析自然语言日期date = maya.when("next friday at 5pm")print(date)
# 转换为其他格式iso_format = date.iso8601()print(iso_format)
复制代码


Delorean


Delorean 是一个用于日期和时间的高级库,它整合了Arrowpytzdateutil等多个库的功能,并提供了简化的 API。


import delorean
# 获取当前时间now = delorean.now()print(now)
# 时区转换utc = now.shift("UTC")print(utc)
# 日期操作future = now.shift(days=10)print(future)
复制代码


Moment.py


Moment.py 是一个模仿 JavaScript 的 moment.js 的库,提供类似的 API 来处理日期和时间。


mport moment
# 获取当前时间now = moment.now()print(now)
# 解析字符串date = moment.date("2024-08-23 10:15:00")print(date)
# 格式化日期formatted = now.format("YYYY-MM-DD HH:mm:ss")print(formatted)
# 相对时间relative = now.add(days=5)print(relative.format("YYYY-MM-DD HH:mm:ss"))
复制代码


这些库如 PendulumArrowMayaDelorean, 和 Moment.py 都提供了更强大和更直观的 API 来处理日期和时间。选择哪个库取决于你的具体需求和偏好。Pendulum 和 Arrow 是目前最流行的选择,提供了广泛的功能和简单易用的接口。

 

3、中文日历的处理


在处理中文日历和与中国文化相关的日期时,Python 也提供了一些有用的库和方法。特别是对于农历、节气、中文日期格式等需求,以下是一些有用的工具和技巧:


1)lunarcalendar


lunarcalendar 是一个用于处理中国农历(阴历)的 Python 库,它可以将公历转换为农历,并处理农历的各个方面。


from lunarcalendar import Converter, Solar, Lunar
# 公历转农历solar = Solar(2024, 8, 23)lunar = Converter.Solar2Lunar(solar)print(lunar) # 输出农历日期
# 农历转公历lunar = Lunar(2024, 7, 18)solar = Converter.Lunar2Solar(lunar)print(solar) # 输出公历日期
# 输出农历日期ld = Lunar.from_date(datetime.now())print(ld)
复制代码


Lunar(year=2024, month=7, day=20, isleap=False)Solar(year=2024, month=8, day=21)Lunar(year=2024, month=7, day=20, isleap=False)
复制代码


2)chinese-calendar


chinese-calendar 是另一个处理中国农历和节日的库,它提供了判断中国法定节假日、节气等功能。


import chinese_calendar as calendarimport datetime
# 检查某天是否为节假日today = datetime.date(2024, 8, 22)
is_holiday = calendar.is_holiday(today)print(is_holiday) # 返回 True 或 False
on_holiday, holiday_name = calendar.get_holiday_detail(today)print(on_holiday, holiday_name) # 返回 True 或 False,节假日名称
# 获取某天的节气end_of_day = datetime.date(2024, 8, 31)term = calendar.get_solar_terms(today, end_of_day)print(term) # 输出节气名称,如"处暑"
复制代码


3) lunar_python


unar 是一款无第三方依赖的公历(阳历)、农历(阴历、老黄历)、佛历和道历工具,支持星座、儒略日、干支、生肖、节气、节日、彭祖百忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道日及吉凶、法定节假日及调休等。

安装


pip install lunar_python
复制代码


使用代码


from lunar_python import Lunar
# 通过指定年月日初始化阴历lunar = Lunar.fromYmd(2024, 7, 19)# 打印阴历print(lunar.toFullString())# 阴历转阳历并打印print(lunar.getSolar().toFullString())
复制代码


输出内容


二〇二四年七月二十 甲辰(龙)年 壬申(猴)月 己未(羊)日 子(鼠)时 纳音[覆灯火 剑锋金 天上火 海中金] 星期五 东方青龙 星宿[亢金龙](凶) 彭祖百忌[己不破券二比并亡 未不服药毒气入肠] 喜神方位[艮](东北) 阳贵神方位[坎](正北) 阴贵神方位[坤](西南) 福神方位[坎](正北) 财神方位[坎](正北) 冲[(癸丑)牛] 煞[西]2024-08-23 00:00:00 闰年 星期五 处女座
复制代码


4)cnlunar


还有一个也比较强大的中国日历,历法,节气等信息的结合体类库,可以通过它获得更多的相关信息。

安装:


pip install cnlunar
复制代码


# 获取农历日期dt_date = datetime.datetime(2024, 8, 22)a = cnlunar.Lunar(dt_date, godType="8char")
dic = { "日期": a.date, "农历数字": ( a.lunarYear, a.lunarMonth, a.lunarDay, "闰" if a.isLunarLeapMonth else "", ), "农历": "%s %s[%s]年 %s%s" % (a.lunarYearCn, a.year8Char, a.chineseYearZodiac, a.lunarMonthCn, a.lunarDayCn), "星期": a.weekDayCn, # 未增加除夕 "今日节日": ( a.get_legalHolidays(), a.get_otherHolidays(), a.get_otherLunarHolidays(), ), "八字": " ".join([a.year8Char, a.month8Char, a.day8Char, a.twohour8Char]), "今日节气": a.todaySolarTerms, "下一节气": (a.nextSolarTerm, a.nextSolarTermDate, a.nextSolarTermYear), "今年节气表": a.thisYearSolarTermsDic, "季节": a.lunarSeason, "今日时辰": a.twohour8CharList, "时辰凶吉": a.get_twohourLuckyList(), "生肖冲煞": a.chineseZodiacClash, "星座": a.starZodiac, "星次": a.todayEastZodiac, "彭祖百忌": a.get_pengTaboo(), "彭祖百忌精简": a.get_pengTaboo(long=4, delimit="<br>"), "十二神": a.get_today12DayOfficer(), "廿八宿": a.get_the28Stars(), "今日三合": a.zodiacMark3List, "今日六合": a.zodiacMark6, "今日五行": a.get_today5Elements(), "纳音": a.get_nayin(), "九宫飞星": a.get_the9FlyStar(), "吉神方位": a.get_luckyGodsDirection(), "今日胎神": a.get_fetalGod(), "神煞宜忌": a.angelDemon, "今日吉神": a.goodGodName, "今日凶煞": a.badGodName, "宜忌等第": a.todayLevelName, "宜": a.goodThing, "忌": a.badThing, "时辰经络": a.meridians,}for i in dic: midstr = "\t" * (2 - len(i) // 2) + ":" + "\t" print(i, midstr, dic[i])
复制代码


输出详细结果如下所示。



 以上即是一些系统的 Python 类库以及第三方的类库,通过它们,我们可以快速的实现各种时间日期历法节气等相关信息的处理。


文章转载自:伍华聪

原文链接:https://www.cnblogs.com/wuhuacong/p/18375704

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
Python开发中,日期时间的相关处理_Python_EquatorCoco_InfoQ写作社区