Arrow

vance發表於2022-09-29

安裝

pip install arrow

使用

獲取當前時間

返回的是Arrow物件

arrow.now()
# 2022-05-06T09:32:41.296610+08:00

arrow.utcnow()
# 2022-05-06T01:50:44.670980+00:00

獲取當前時間戳

arrow.now().timestamp
# 1651800761

arrow.now().float_timestamp
# 1651800761.29661

獲取datetime屬性值

獲取當前時間的年、月、日、時、分、秒

now = arrow.now()  # 2022-05-06T09:32:41.296610+08:00

now.year  # 2022
now.month  # 5
now.day  # 6
now.hour  # 9
now.minute  # 32
now.second  # 41 

將arrow物件轉為字串

將arrow物件轉為字串格式化輸出

now = arrow.now()  # 2022-05-06T09:32:41.296610+08:00

now.format()  # '2022-05-06 09:32:41+08:00'
now.format('YYYY-MM-DD HH:mm:ss ZZ')  # '2022-05-06 09:32:41 +08:00'
now.format('YYYY-MM-DD HH:mm:ss')  # '2022-05-06 09:32:41'
now.format('YYYYMMDD')  # '20220506'
now.format('X')  # '1651800761'  字串格式的時間戳
now.format('MMMM')  # 'May' 英文的月份

將時間戳轉化為arrow物件

arrow.get(1651800761)  #  2022-05-06T01:32:41+00:00

# 轉換為字串
arrow.get(1651800761).format('YYYY-MM-DD HH:mm:ss')  # '2022-05-06 09:32:41'

從字串中獲取時間

日期和時間格式的任一側都可以用以下列表中的一個標點符號分隔:,.;:?!"\‘[]{}()<>`

arrow.get("Cool date: 2019-10-31T09:12:45.123456+04:30.", "YYYY-MM-DDTHH:mm:ss.SZZ")  # <Arrow [2019-10-31T09:12:45.123456+04:30]>
arrow.get("Tomorrow (2019-10-31) is Halloween!", "YYYY-MM-DD")  # <Arrow [2019-10-31T00:00:00+00:00]>
arrow.get("Halloween is on 2019.10.31.", "YYYY.MM.DD")  # <Arrow [2019-10-31T00:00:00+00:00]>

# 錯誤示例
arrow.get("It's Halloween tomorrow (2019-10-31)!", "YYYY-MM-DD")  # 引發異常,因為日期後面有多個標點符號

字串轉換為時間戳

arrow.get("2022-05-01").int_timestamp  # 1651363200
arrow.get("2022-05-01").float_timestamp  # 1651363200.0
arrow.get("2022-05-01").timestamp()  # 1651363200.0

arrow物件轉換為datetime物件

arrow.now().datetime  # 2022-05-06 09:32:41.296610+08:00

時間偏移

shift()

now = arrow.now()  # 2022-05-06T09:32:41.296610+08:00

# 後3天
now.shift(days=3).format('YYYY:MM:DD HH:mm:ss')  # '2022:05:09 09:32:41'

# 前2天
now.shift(days=-2).format('YYYY:MM:DD HH:mm:ss')  # '2022:05:04 09:32:41'

# 上1年
now.shift(years=-1).format('YYYY:MM:DD HH:mm:ss')  # '2021:05:04 09:32:41'

# 下2個月
now.shift(months=2).format('YYYY:MM:DD HH:mm:ss')  # '2022:07:06 09:32:41'

# 2小時後
now.shift(hours=2).format('YYYY:MM:DD HH:mm:ss')  # '2022:05:06 11:32:41'

# 1分鐘前
now.shift(minutes=-1).format('YYYY:MM:DD HH:mm:ss')  # '2022:05:06 09:34:41'

# 30秒前
now.shift(seconds=-30).format('YYYY:MM:DD HH:mm:ss')  # '2022:05:06 09:34:11'

也可以多個引數同時使用

# 30秒前
now.shift(hours=2, minutes=-1, seconds=-30).format('YYYY:MM:DD HH:mm:ss') 

其它方法

humanize() 人性化輸出

本地化、人性化表示返回相對時間差異

now = arrow.now()
now.humanize()  # '26 seconds ago'
now.humanize(locale='zh-cn')  # ‘26秒前’


now = arrow.now()
future = now.shift(hours=2)
future.humanize(now, locale='zh-cn')  # '2小時後'

span() 獲取任何單位的時間跨度

now.span('hour')  # (<Arrow [2022-05-06T15:00:00+08:00]>, <Arrow [2022-05-06T15:59:59.999999+08:00]>)

floor() # 時間所在區間的開始

now.floor('hour')  # <Arrow [2022-05-06T15:00:00+08:00]>

ceil() # 時間所在區間的結尾

now.ceil('hour')  # <Arrow [2022-05-06T15:59:59.999999+08:00]>

原始碼解析

以下列舉一些庫中重要的檔案及關鍵的方法,目前安裝的是Arrow1.2.2版本

Python基礎庫

在arrow.py檔案中,匯入了calendar、datetime、time、dateutil時間處理庫

本作品採用《CC 協議》,轉載必須註明作者和本文連結
vance