Python 处理各种日期 大集合

Python 更好的日期时间模块arrow


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')))


执行结果如下:

在这里插入图片描述
还可以把时间戳转换为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"))

运行如下:
在这里插入图片描述
看到这个,是不是感觉比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]>)  

详见图片:
在这里插入图片描述

二. 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())

在这里插入图片描述

获取上周第一天和最后一天:
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])

在这里插入图片描述

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

在这里插入图片描述

获取去年第一天和最后一天:
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) 

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值