Python 更好的日期时间模块arrow


文章目录

  • Python 更好的日期时间模块arrow
  • 1.安装环境包
  • 获取当前时间
  • 时间形式转换
  • 转换成时间戳
  • 获取全部数据
  • 修改时间和时间的计算
  • # 时间推移 a.shift(**kwargs),
  • 时间替换 a.replace(**kwargs)
  • 二. datetime 模块
  • 获取当天日期
  • 格式化时间
  • 时间差计算
  • 加 一分钟
  • 减 一小时
  • 三.time计算时间
  • 将日期转为秒级时间戳
  • 将秒级时间戳转为日期
  • timedelta时间的用法
  • 获取昨天日期:
  • 获取明天日期:
  • 获取本周第一天和最后一天:
  • 获取上周第一天和最后一天:
  • 获取本月第一天和最后一天:
  • 获取本年第一天和最后一天:
  • 获取去年第一天和最后一天:



arrow是一个专门处理时间和日期的轻量级Python库,它提供了一种合理、人性化的方式来创建、操作、格式化、转换日期、时间和时间戳,可以比较轻易的创建具有时区意识的日期和时间实例。


1.安装环境包
pip install arrow

Arrow可以很灵活的将多种格式的时间数据转换成Arrow对象

import arrow

print(repr(arrow.Arrow(2021, 8, 23, 8)))
print(repr(arrow.get(2021, 8, 23, 8, 40)))
print(repr(arrow.get('2021-08-23 09:00')))
print(repr(arrow.get('2021.08.23')))
print(repr(arrow.get('23/2012/08', 'DD/YYYY/MM')))

执行结果如下:

Python的日期format格式化输出 python日期型_获取当前时间


还可以把时间戳转换为arrow对象。

print(repr(arrow.get(1629683393.6558669)))

获取当前时间

utc_time = arrow.utcnow()
local_time = arrow.now()
print(utc_time)
print(local_time)

提示:通过utcnow()函数和now()函数分别获取的是utc时间和本地时间,
当然我们也可以在调用now()时指定时区,从而获取指定时区的时间,
例如arrow.now(‘US/Pacific’)。


时间形式转换

now = arrow.now()

print(now)
print(now.format())
print(now.format("YYYY-MM-DD hh:mm:ss"))
print(now.format("YYYY-MM-DD"))

运行如下:

Python的日期format格式化输出 python日期型_Python_02


看到这个,是不是感觉比datetime模块的’%Y-%M-%D %h:%m:%s’格式化方式更人性化更便于记忆呢。

转换成时间戳
now = arrow.now()
now.timestamp
获取全部数据
now = arrow.now()

print(now.year)# 当前年
print(now.month)# 当前月份
print(now.day)# 当前天
print(now.hour) # 当前多少小时
print(now.minute) # 当前多少分钟
print(now.second) # 当前多少秒
print(now.week) # 当前多少周
修改时间和时间的计算
now = arrow.now()

print(now.format("YYYY-MM-DD hh:mm:ss"))  # 2021-08-23 10:11:04
now_utc = now.to("utc")
print(now_utc.format("YYYY-MM-DD hh:mm:ss"))  # 2021-08-23 02:11:04
now1 = now.replace(day=31, hour=12)
print(now1.format("YYYY-MM-DD hh:mm:ss"))  # 2021-08-31 12:11:04
now2 = now.shift(months=-2)
print(now2.format("YYYY-MM-DD hh:mm:ss"))  # 2021-06-23 10:11:04

详见: https://arrow.readthedocs.io/en/latest/

# 时间推移 a.shift(**kwargs),

shift方法获取某个时间之前或之后的时间,关键字参数为years,months,weeks,days,hours,seconds,microseconds

a=arrow.now()  # 获取当前时间

a.shift(weeks=+3))  # 三周后

a.shift(days=-1)     #一天前   

a.shift(weekday=6)   #距离最近a的星期日,weekday从0到6
时间替换 a.replace(**kwargs)

返回一个被替换后的arrow对象

a.replace(hour=9)
<Arrow [2021-08-31T09+:58:04.309575+08:00]>

a.span('hour')    #a所在的时间区间
-(<Arrow [2018-02-24T21:00:00+08:00]>, <Arrow [2018-02-24T21:59:59.999999+08:00]>)

详见图片:

Python的日期format格式化输出 python日期型_时间戳_03

二. datetime 模块

获取当天日期
import datetime
time_now=datetime.datetime.now()
print(time_now)
#2021-08-31 23:11:33.716549

a = datetime.date.today()
print(a)

#2021-08-31
格式化时间
str_time="2010-11/10 23:10:9"
t=datetime.datetime.strptime(str_time,"%Y-%m/%d %H:%M:%S")
print(t)
#2021-08-31 23:10:09
时间差计算

时间是:hours
日期是:days
分钟是:minutes

当前时间+12小时,vaLue为2010-11-10 23:10:9
startTime = datetime.datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
usa_time = (startTime + datetime.timedelta(hours=12)).strftime("%Y-%m-%d %H:%M:%S")
            return usa_time
加 一分钟
print (datetime.datetime.now()+datetime.timedelta(minutes=1)).strftime("%Y-%m-%d %H:%M:%S")
减 一小时
print (datetime.datetime.now()+datetime.timedelta(hours=-1)).strftime("%Y-%m-%d %H:%M:%S")

三.time计算时间

将日期转为秒级时间戳
dt = '2018-01-01 10:40:30'
ts = int(time.mktime(time.strptime(dt, "%Y-%m-%d %H:%M:%S")))
print (ts) # 1514774430
将秒级时间戳转为日期
ts = 1515774430
dt = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(ts)))
print(dt) # 2018-01-13 00:27:10

###  将秒级时间戳转为日期,函数写法
```py
def timetimes(tm):
	a = str(int(time.mktime(time.strptime(tm, "%Y-%m-%d %H:%M:%S")) + 2 * 3600))# 一小时=3600s====这里代表加上2小时
	b=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(a)))
	return b
tm = "2021-08-31 14:58:12"
timetimes(tm)

timedelta时间的用法

获取昨天日期:
import datetime
from datetime import timedelta

now = datetime.datetime.now()
yesterday = now - timedelta(days=1)

未完待续

获取明天日期:
tomorrow = now + timedelta(days=1)
获取本周第一天和最后一天:
this_week_start = now - timedelta(days=now.weekday())
this_week_end = now + timedelta(days=6-now.weekday())

Python的日期format格式化输出 python日期型_时间戳_04

获取上周第一天和最后一天:
last_week_start = now - timedelta(days=now.weekday()+7)
last_week_end = now - timedelta(days=now.weekday()+1)
获取本月第一天和最后一天:
this_month_start = datetime.datetime(now.year, now.month, 1)
this_month_end = datetime.datetime(now.year, now.month, calendar.monthrange(now.year, now.month)[1])

Python的日期format格式化输出 python日期型_pycharm_05

获取本年第一天和最后一天:
this_year_start = datetime.datetime(now.year, 1, 1)
this_year_end = datetime.datetime(now.year + 1, 1, 1) - timedelta(days=1)

Python的日期format格式化输出 python日期型_获取当前时间_06

获取去年第一天和最后一天:
this_year_start = datetime.datetime(now.year, 1, 1)
last_year_end = this_year_start - timedelta(days=1)
last_year_start = datetime.datetime(last_year_end.year, 1, 1)

Python的日期format格式化输出 python日期型_python_07