在Python開發(fā)中,日期和時間處理是一個常見的需求。Python提供了多種模塊和方法來處理日期和時間,以下是一些常用的模塊和操作。通過介紹一些系統(tǒng)的Python類庫以及第三方的類庫,我們可以快速的實現各種時間日期歷法節(jié)氣等相關信息的處理。
1、系統(tǒng)內置日期時間模塊
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) # 當前時間戳
延遲執(zhí)行
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")
輸出結果
組合一些擴展的函數處理,我們還可以進行農歷年、節(jié)氣的處理,如下所示。
今天是2024年8月23日 星期五 農歷甲辰[龍]年七月廿十 今日節(jié)氣:#處暑#
2、第三方日期時間處理庫
Python第三方庫非常多也非常方便,我們可以根據自己需要選擇一些比較優(yōu)秀的第三方庫來處理日期和時間的問題。
pytz 是一個第三方庫,用于處理時區(qū)轉換。
from datetime import datetime
import pytz
tz = pytz.timezone("Asia/Shanghai")
now_shanghai = datetime.now(tz)
print(now_shanghai) # 輸出當前時間,帶時區(qū)信息
# 輸出帶時區(qū)的時間
print(now_shanghai.strftime("%Y-%m-%d %H:%M:%S %Z%z"))
# 輸出不帶時區(qū)的時間
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,同時內置時區(qū)處理和格式化功能。
import pendulum
# 獲取當前時間
now = pendulum.now()
print(now) # 帶有時區(qū)信息
# 創(chuàng)建特定日期時間
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)
# 時區(qū)轉換
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)
# 時區(qū)轉換
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也提供了一些有用的庫和方法。特別是對于農歷、節(jié)氣、中文日期格式等需求,以下是一些有用的工具和技巧:
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 是另一個處理中國農歷和節(jié)日的庫,它提供了判斷中國法定節(jié)假日、節(jié)氣等功能。
import chinese_calendar as calendar
import datetime
# 檢查某天是否為節(jié)假日
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,節(jié)假日名稱
# 獲取某天的節(jié)氣
end_of_day = datetime.date(2024, 8, 31)
term = calendar.get_solar_terms(today, end_of_day)
print(term) # 輸出節(jié)氣名稱,如"處暑"
3) lunar_python
unar是一款無第三方依賴的公歷(陽歷)、農歷(陰歷、老黃歷)、佛歷和道歷工具,支持星座、儒略日、干支、生肖、節(jié)氣、節(jié)日、彭祖百忌、吉神(喜神/福神/財神/陽貴神/陰貴神)方位、胎神方位、沖煞、納音、星宿、八字、五行、十神、建除十二值星、青龍名堂等十二神、黃道日及吉兇、法定節(jié)假日及調休等。
安裝
使用代碼
from lunar_python import Lunar
# 通過指定年月日初始化陰歷
lunar = Lunar.fromYmd(2024, 7, 19)
# 打印陰歷
print(lunar.toFullString())
# 陰歷轉陽歷并打印
print(lunar.getSolar().toFullString())
輸出內容
二〇二四年七月二十 甲辰(龍)年 壬申(猴)月 己未(羊)日 子(鼠)時 納音[覆燈火 劍鋒金 天上火 海中金] 星期
五 東方青龍 星宿[亢金龍](兇) 彭祖百忌[己不破券二比并亡 未不服藥毒氣入腸] 喜神方位[艮](東北) 陽貴神方位[坎](正北) 陰貴神方位[坤](西南) 福神方位[坎](正北) 財神方位[坎](正北) 沖[(癸丑)牛] 煞[西]
2024-08-23 00:00:00 閏年 星期五 處女座
還有一個也比較強大的中國日歷,歷法,節(jié)氣等信息的結合體類庫,可以通過它獲得更多的相關信息。
安裝:
# 獲取農歷日期
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,
# 未增加除夕
"今日節(jié)日": (
a.get_legalHolidays(),
a.get_otherHolidays(),
a.get_otherLunarHolidays(),
),
"八字": " ".join([a.year8Char, a.month8Char, a.day8Char, a.twohour8Char]),
"今日節(jié)氣": a.todaySolarTerms,
"下一節(jié)氣": (a.nextSolarTerm, a.nextSolarTermDate, a.nextSolarTermYear),
"今年節(jié)氣表": a.thisYearSolarTermsDic,
"季節(jié)": 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])
輸出詳細結果如下所示。
以上即是一些系統(tǒng)的Python類庫以及第三方的類庫,通過它們,我們可以快速的實現各種時間日期歷法節(jié)氣等相關信息的處理。
|