Python开发中,日期时间的相关处理
在Python开发中,日期和时间处理是一个常见的需求。Python提供了多种模块和方法来处理日期和时间,以下是一些常用的模块和操作。通过介绍一些系统的Python类库以及第三方的类库,我们可以快速的实现各种时间日期历法节气等相关信息的处理。
1、系统内置日期时间模块
1) datetime 模块
datetime 是Python中处理日期和时间的主要模块。它提供了多个类,如 datetime, date, time, timedelta, 和 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 = 2024
month = 8
print(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.month
weekname = 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 datetime
import 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:00
2024-08-23 10:52:56 CST+0800
2024-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:00
2024-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 是一个用于日期和时间的高级库,它整合了Arrow、pytz、dateutil等多个库的功能,并提供了简化的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"))
这些库如 Pendulum, Arrow, Maya, Delorean, 和 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 calendar
import 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类库以及第三方的类库,通过它们,我们可以快速的实现各种时间日期历法节气等相关信息的处理。
Python开发中,日期时间的相关处理的更多相关文章
- 【Java 与数据库】JDBC中日期时间的处理技巧
JDBC中日期时间的处理技巧 详谈Java.util.Date和Java.sql.Date 基础知识 Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒 ...
- [转]JDBC中日期时间的处理技巧
Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒.毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后判断等. java.uti ...
- IT蓝豹强烈推荐:符合1-2年工作经验,开发中的难点及相关优化:
IT蓝豹强烈推荐:符合1-2年工作经验,开发中的难点及相关优化: IT蓝豹 ------------------> sqlite数据库版本升级 1.sqlite升级步骤: 1.自己写一个类继承自 ...
- Python与SQLite日期时间函数的使法
SQLite的时间函数跟Python的时间函数有些许差别,所以稍做记录,供自己以后查询. 网上有将SQLite官方WIKI内容翻译成中文的文章,大家有兴趣可以搜索一下,我这里单纯记录一下个人比较常用的 ...
- 了解 Python 语言中的时间处理
python 语言对于时间的处理继承了 C语言的传统,时间值是以秒为单位的浮点数,记录的是从1970年1月1日零点到现在的秒数,这个秒数可以转换成我们日常可阅读形式的日期和时间:我们下面首先来看一下p ...
- Sql Server中日期时间格式化为字符串输出
在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...
- iOS-Runtime在开发中的使用及相关面试题
OC语言中最为强大的莫过于OC的运行时机制-Runtime,但因其比较接近底层,一旦使用Runtime出现bug,将很难调试,所以Runtime在开发中能不用就不用.下面我将介绍一些Runtime在开 ...
- IOS开发—UIDatePicker 日期/时间选取器(滚轮)
UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,专门用于接受日期.时间和持续时长的输入.日期选取器的各列会按照指定的风格进行自动配置,这样 ...
- sql语句中日期时间格式化查询
今天在做会员管理系统搜索时,我发现以前的搜索时间方式不太科学,效率也不是太高.由其是在查询指定的时间相等的时候,我在数据库中都存这样的时间格式"2007-5-22 14:32:1 ...
- Oracle 数据库中日期时间的插入操作
Oracle 中如何插入日期时间类型的数据,首先为了演示, 新建数据表如下 create table t( mydate date); 插入日期时间 SQL> insert into t val ...
随机推荐
- python基础-集合set { }
集合的定义和操作 集合的特性: 元素数量 支持多个 元素类型 任意 下标索引 支持 重复元素 不支持 可修改性 支持 数据有序 否 使用场景 不可重复的数据记录场景 # 定义集合 my_set = { ...
- CosyVoice多语言、音色和情感控制模型,one-shot零样本语音克隆模型本地部署(Win/Mac),通义实验室开源
近日,阿里通义实验室开源了CosyVoice语音模型,它支持自然语音生成,支持多语言.音色和情感控制,在多语言语音生成.零样本语音生成.跨语言声音合成和指令执行能力方面表现卓越. CosyVoice采 ...
- Redis缓存满了,如何存放数据?缓存淘汰策略
我们的redis使用的是内存空间来存储数据的,但是内存空间毕竟有限,随着我们存储数据的不断增长,当超过了我们的内存大小时,即在redis中设置的缓存大小(maxmeory 4GB),redis会怎么处 ...
- Microsoft Compatibility telemetry占cpu资源高
1.在Windows10系统卡的时候,打开任务管理器,发现Microsoft Compatibility telemetry占用了大量的系统资源,特别是CPU占用率非常高. 位置:控制面板->管 ...
- ctfshow sql-labs(笔记)
这是当时做题的时候记得笔记有些乱看不懂的可以私我 判断闭合方式: id=1' and 1=1–+ *正常回显* id=1' and 1=2–+ *异常回显* id=1 and 1=1 *正常回显* i ...
- 从零开始写 Docker(十九)---增加 cgroup v2 支持
本文为从零开始写 Docker 系列第十九篇,添加对 cgroup v2 的支持. 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 d ...
- scratch编程作品-《滚动的物理小球》
程序说明: <滚动的物理小球>是一款基于Scratch平台开发的小游戏.在这个游戏中,玩家通过按左右方向键来控制一个小球在屏幕上的左右移动.小球在移动过程中,完全遵循物理引擎的规则,如加速 ...
- docker 安装 centos8 mysql8 java tomcat
docker 安装 centos8 mysql8 java tomcat 一,首先在window10系统安装docker,这里就不再描述了. 二,启动docker下载安装centos8镜像 注意: ...
- 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉?
我的博客园:https://www.cnblogs.com/CQman/ 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉? 需求信息: 用户本地AD用户通过ADConnect同步到O365,用户想 ...
- 【Dubbo】构建SpringBoot整合Dubbo的Demo
参考乐字节的Dubbo教程 https://www.bilibili.com/video/BV19L4y1n7YE Zookeeper单机部署 (Windows) 因为项目需要,这里我自己学习就采用Z ...