Python Arrow 庫詳解:更智能的日期時間處理

1. 安裝與基本用法

安裝 Arrow


pip install arrow

基本使用示例


import arrow# 獲取當前時間
now = arrow.now()
print(now)  # 輸出: 2023-07-15T14:30:45.123456+08:00# 創建特定時間
dt = arrow.get('2023-07-15 14:30:00', 'YYYY-MM-DD HH:mm:ss')
print(dt)  # 輸出: 2023-07-15T14:30:00+00:00

2. 核心功能

2.1 時間創建與解析


# 從字符串解析
dt1 = arrow.get('2023-07-15')
dt2 = arrow.get('July 15, 2023', 'MMMM D, YYYY')# 從時間戳創建
ts = arrow.get(1689408000)  # 時間戳# 指定時區
tz_aware = arrow.now('US/Pacific')

2.2 時間屬性訪問


dt = arrow.now()print(dt.year)    # 年
print(dt.month)   # 月
print(dt.day)     # 日
print(dt.hour)    # 時
print(dt.minute)  # 分
print(dt.second)  # 秒
print(dt.weekday())  # 星期幾 (0-6, 0是周一)

2.3 時間運算


# 時間加減
tomorrow = dt.shift(days=1)
last_week = dt.shift(weeks=-1)# 時間差計算
diff = tomorrow - last_week
print(diff.days)  # 輸出: 8

2.4 時間格式化


# 格式化為字符串
print(dt.format('YYYY-MM-DD HH:mm:ss'))  # 輸出: 2023-07-15 14:30:45
print(dt.format('dddd, MMMM D, YYYY'))   # 輸出: Saturday, July 15, 2023# 人性化顯示
print(dt.humanize())  # 輸出: "just now", "an hour ago" 等

3. 高級特性

3.1 時區處理


# 本地時間轉其他時區
utc_time = dt.to('UTC')
ny_time = dt.to('America/New_York')# 時區轉換鏈
print(dt.to('UTC').to('Asia/Tokyo').to('US/Pacific'))

3.2 時間范圍生成


# 生成時間范圍
start = arrow.get('2023-07-01')
end = arrow.get('2023-07-31')for day in arrow.Arrow.range('day', start, end):print(day.format('YYYY-MM-DD'))

3.3 時間替換


# 替換部分時間
new_dt = dt.replace(hour=8, minute=0, second=0)

4. 與標準庫對比

4.1 創建時間對象


# 標準庫方式
from datetime import datetime
dt_std = datetime(2023, 7, 15, 14, 30)# Arrow方式
dt_arrow = arrow.get('2023-07-15 14:30:00')

4.2 時區處理


# 標準庫時區處理 (需要pytz)
from datetime import datetime
import pytzdt_std = datetime(2023, 7, 15, tzinfo=pytz.timezone('Asia/Shanghai'))# Arrow時區處理
dt_arrow = arrow.now('Asia/Shanghai')

5. 實際應用示例

5.1 日志時間處理


import arrowlog_time = "2023-07-15T14:30:45.123Z"
dt = arrow.get(log_time)# 轉換為本地時間
local_dt = dt.to('local')
print(f"日志記錄于: {local_dt.humanize()} ({local_dt.format('YYYY-MM-DD HH:mm:ss')})")

5.2 時間區間統計


start = arrow.get('2023-07-01')
end = arrow.get('2023-07-31')# 計算7月有多少個周末
weekends = [day for day in arrow.Arrow.range('day', start, end) if day.weekday() in [5, 6]]
print(f"7月有 {len(weekends)} 個周末日")

5.3 API 時間參數處理


def parse_api_time(time_str, tz='UTC'):"""處理API返回的各種時間格式"""try:return arrow.get(time_str).to(tz)except arrow.parser.ParserError:return arrow.now(tz)

6. 性能考慮

  • 解析性能:Arrow 的解析速度比純 Python 的 datetime.strptime 快
  • 內存占用:Arrow 對象比 datetime 對象稍大
  • 替代方案:對性能要求極高的場景可以考慮 pendulum 或 ciso8601

Arrow 提供了比標準庫更直觀、功能更豐富的日期時間操作接口,特別適合需要復雜時間處理、多時區轉換的應用場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/910575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/910575.shtml
英文地址,請注明出處:http://en.pswp.cn/news/910575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大家電破渠道困局,小家電攻用戶體驗,云徙有何解法?

中國家電行業正經歷深刻轉型。 自2018年市場規模觸及8400億頂峰后,行業從增量競爭轉向存量博弈。與此同時,線上渠道在2023年首次以58%的占比超越線下,其中掃地機器人等小家電品類線上滲透率突破90%。消費需求也在同步重構——從家庭場景向個…

DMDPC多副本數據分布測試

需求:測試建表和插入數據是否會根據分布列進行自動分發。 驗證方法:1)準備基礎環境:創建用戶和表空間。2)創建數據分布測試表,并插入數據。3)查詢指定分區數據,驗證數據分布情況。 …

Qt/C++開發監控GB28181系統/rtp解包/jrtplib庫的使用/同時支持udp和tcp被動和主動三種方式解包

一、前言說明 通過sip協議僅僅是交互,音視頻數據的收發最終并不是通過sip傳輸的,而是通過將數據打包成rtp的格式再通過udp或者tcp通信的,sip協議僅僅是告知對方待會要往哪里發數據,是udp還是tcp。由于數據都是rtp包格式&#xff…

集群聊天服務器---muduo庫的使用

使用 C 和 muduo 網絡庫來實現一個簡單的聊天服務器和客戶端。 服務器端: class chatServer { public:// 初始化TcpServerchatServer(muduo::net::EventLoop *loop,const muduo::net::InetAddress &listenAddr): _server(loop, listenAddr, "chatServer&…

關于Net Core Web API 項目測試 數據庫模擬的兩種不同方法 DC_week 6

1.關系型數據庫 插件:Microsoft.EntityFrameworkCore.InMemory Microsoft.EntityFrameworkCore.InMemory 是一個用于測試的“臨時內存數據庫”,讓你在不連接真實數據庫的情況下,測試 EF Core 的功能。 使用時就是用具體這個框架里面已經…

如何獲取 vscode 的 vsix 離線插件安裝包

1、搜索所需要的插件 Extensions for Visual Studio family of products | Visual Studio Marketplace網址 2、點擊 Repository 跳轉到對應的 git 倉庫 3、在 git 倉庫依次選擇 main , Tags, View all tags 4、選擇你想下載的版本,并點擊 downloads 5、往下滑動&…

ULS23 挑戰:用于計算機斷層掃描中 3D 通用病變分割的基準模型及基準數據集|文獻速遞-深度學習醫療AI最新文獻

Title 題目 The ULS23 challenge: A baseline model and benchmark dataset for 3D universal lesion segmentation in computed tomography ULS23 挑戰:用于計算機斷層掃描中 3D 通用病變分割的基準模型及基準數據集 01 文獻速遞介紹 每年進行的CT檢查數量持續…

WebSocket 端點 vs Spring Bean

在websocket端點中注入業務service時,不能像普通的springbean一樣通過Autowired或Resource注解進行注入。主要原因是websocket端點與spring容器中的bean的生命周期管理容器不同。 WebSocket 端點(ServerEndpoint)和 Spring Bean 的生命周期存…

MySQL8:jdbc插入數據后獲取自增ID

pom文件&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"&…

MyBatis(Web后端開發第二期)

p.s.這是萌新自己自學總結的筆記&#xff0c;如果想學習得更透徹的話還是請去看大佬的講解 目錄 JDBC、數據庫連接池、lombok日志輸出SQL注入數據封裝XML映射文件動態SQL<if><where><set><foreach><sql><include> 配置文件 Mybatis是是一…

Angular1--Hello

最近有個小錯誤&#xff0c;因為最近還是在看thingsboard&#xff0c;最近終于看到前端的代碼&#xff0c;突然發現怎么全是ts的文件&#xff0c;仔細一看原來并不是之前認為的AngularJS&#xff0c;而是Angular。。。我tm真的無語了&#xff0c;又要去重新學。。。 Angular的…

什么是redission看門狗機制

Redisson 的看門狗機制(Watchdog Mechanism)是其實現可重入分布式鎖時的一個核心特性,主要用于解決業務邏輯執行時間超過鎖的過期時間(leaseTime)而導致鎖提前釋放,進而引發數據不一致的問題。它是一個自動的鎖續期機制。 ?? 核心問題:為什么需要看門狗? 分布式鎖的…

黑馬程序員蒼穹外賣DAY1

1. 前端頁面能正常顯示但無法登錄&#xff08;一直轉圈圈&#xff09; 找到下面路徑的dev.yml port一定要跟自己本機的保持一致&#xff0c;&#xff0c;username和password也一定是自己主機的用戶名和密碼&#xff0c;不然連不上。 登錄界面的密碼為數據庫表的密碼&#xff0…

Frida Hook Android App 點擊事件實戰指南:從進程識別到成功注入

一、背景與目標 在逆向分析和自動化測試中&#xff0c;Hook Android 的點擊事件是調試 UI 交互邏輯的重要手段之一。本文將以實際案例講解如何通過 Frida Hook public void onClick(View view) 方法&#xff0c;并解決常見的 Hook 失敗問題&#xff0c;最終實現對登錄按鈕的監…

Arduino Nano 33 BLE Sense Rev 2開發板使用指南之【環境搭建 / 點燈】

一、硬件介紹 1、產品特點 Arduino Nano 33 BLE Rev2&#xff0c;利用了nRF52840微控制器的先進功能。這款32位Arm Cortex-M4 CPU 64 MHz與MicroPython的兼容性增強了板子的靈活性&#xff0c;使其更容易被更廣泛的開發者社區所接受。 該開發板的突出特點是其藍牙低功耗&…

[QT]-宏使用

用宏,務必寫清文檔并用 do {…} while (0)為啥呢,示例 在 C/C++ 中,使用 do { … } while (0) 包裹宏定義是一種經典的最佳實踐,主要用于解決宏展開后的語法和邏輯問題。以下是詳細解釋和示例: 一、為什么用 do { … } while (0) 包裹宏? 避免分號導致的語法錯誤 問題場…

python-property、反射

# ### property """ 可以把方法變成屬性 : 可以動態的控制屬性的獲取,設置,刪除相關操作 property 獲取屬性 方法名.setter 設置屬性 方法名.deleter 刪除屬性 """ # 方法一 """是同一個方法名""" class MyCla…

【自動鼠標鍵盤控制器|支持圖像識別】

[軟件名稱]: 電腦圖像識別 [軟件大小]: 57.2 MB [下載通道]: 夸克盤 | 迅雷盤 &#x1f3ae;【自動鼠標鍵盤控制器&#xff5c;支持圖像識別】基于Python開發的智能自動化工具 輕量便捷的自動化操作工具&#xff0c;集成圖像識別、鼠標控制、鍵盤模擬等功能&#xff0c;輕松…

ISO/IEC 8824規范實際應用案例

案例 1&#xff1a;X.509 數字證書&#xff08;互聯網安全基石&#xff09; 標準依據&#xff1a;RFC 5280 (基于 ASN.1 定義) 核心應用&#xff1a; Certificate :: SEQUENCE {tbsCertificate TBSCertificate, -- 證書主體signatureAlgorithm AlgorithmIdentifier,…

QT6工程各種路徑詳解

一.當前工作目錄 1.獲取方法&#xff1a; #include <QDir> qDebug() << "當前工作目錄&#xff1a;" << QDir::currentPath(); 打印結果&#xff1a; 當前工作目錄&#xff1a; "D:/2.QT/test/test_console/build/QT6_8_2_64_MSVC-Release&…