首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年08月23日 10:49

在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.jsday.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"))

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

 

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类库以及第三方的类库,通过它们,我们可以快速的实现各种时间日期历法节气等相关信息的处理。

 

From:https://www.cnblogs.com/wuhuacong/p/18375704
本文地址: http://shuzixingkong.net/article/1372
0评论
提交 加载更多评论
其他文章 计算机组成原理【2】: 数据的表示和运算-上
概述 数制与编码 进位计数制及其相互转换;定点数的编码表示 运算方法和运算电路 基本运算部件:加法器;算术逻辑单元(ALU) 加减运算:补码加/减运算器;标志位的生成 乘/除运算:乘/除法运算的基本原理;乘法电路和除法电路的基本结构 数制与编码 进位计数制及其相互转换 采用二进制编码的原因 二进制只
计算机组成原理【2】: 数据的表示和运算-上 计算机组成原理【2】: 数据的表示和运算-上 计算机组成原理【2】: 数据的表示和运算-上
使用Ollama本地离线体验SimpleRAG(手把手教程)
Ollama介绍 Ollama是一个开源项目,专注于开发和部署大语言模型,特别是像LLaMA这样的模型,用于生成高质量的文本和进行复杂的自然语言处理任务。Ollama的目标是让大语言模型的运行和使用变得更加容易和普及,而无需复杂的基础设施或深度的机器学习知识。 GitHub地址:https://gi
使用Ollama本地离线体验SimpleRAG(手把手教程) 使用Ollama本地离线体验SimpleRAG(手把手教程) 使用Ollama本地离线体验SimpleRAG(手把手教程)
零基础学习人工智能—Python—Pytorch学习(八)
前言 本文介绍卷积神经网络的上半部分。 其实,学习还是需要老师的,因为我自己写文章的时候,就会想当然,比如下面的滑动窗口,我就会想当然的认为所有人都能理解,而实际上,我们在学习的过程中之所以卡顿的点多,就是因为学习资源中想当然的地方太多了。 概念 卷积神经网络,简称CNN, 即Convolution
零基础学习人工智能—Python—Pytorch学习(八) 零基础学习人工智能—Python—Pytorch学习(八)
Vue状态管理库Pinia详解
Pinia 是 Vue 的状态管理库,它提供了一种更简单、更不规范的 API 来管理应用的状态。Pinia 的设计哲学是简单性和易用性,它避免了 Vuex 中的许多复杂概念,如 mutations 和模块的嵌套结构,提供了一种更现代、更符合 Vue 3 Composition API 风格的状态管理
小公司后端架构、代码、流程吐槽
自从入职以来越来越难顶小公司的后端架构、代码结构 前提 任何的架构、代码,都离不开业务,用户量,所以需要提前说明一下 就我一个后端开发,需要负责日常开发、运维、架构方案设计 两年多经验,可能一些东西考虑的不是很周全,只根据当下的认知吐槽,可能下个月觉得现在幼稚 后台用户量不过万,物联网行业 简单吐槽
小公司后端架构、代码、流程吐槽 小公司后端架构、代码、流程吐槽 小公司后端架构、代码、流程吐槽
傅里叶变换
傅里叶变换 对于周期信号,如果满足 \(Dirichlet\) 条件,就可以尝试将其分解为傅里叶级数,并绘制成频谱的形式,但是在实际使用的过程中我们遇到的信号往往既不是周期的信号又难以获取解析式。对于复杂的现实信号,我们可以将问题的难点拆分开,我们先解决不是周期信号但解析式已知的情况,再去解决难以获
傅里叶变换
Spherical Voxelization
介绍了球面体素化的过程,包括重要的类和方法,如ConvertToSphericalVoxel和spherical_voxel_optimized,详细解释了参数及其作用。球面体素化通过将点云转换为球面坐标系,利用自适应采样权重来平衡不同纬度区域的点密度,从而有效捕捉几何特征。文中还提到C++绑定的s
【故障公告】博客站点遭遇大规模 DDoS 攻击
今天 12:24 开始收到阿里云的电话、短信与邮件通知,博客站点的其中一台负载均衡因 DDoS 攻击被阿里云屏蔽 您的IP: x.x.x.x 实例名称:yy 受到攻击,攻击流量已超过DDoS基础防护的黑洞阈值,服务器的所有公网访问已被屏蔽,屏蔽时长20分钟,屏蔽时间内未再次被攻击将自动解除否则会延期