Python 日期时间处理小结

背景

汇总一下日常工作中常用到日期处理函数和方法,供记录和加深印象使用,也可用于其他数据分析师的参考使用。先大致描述一下,我们在工作中可能会用到的一些场景:

  1. 获取或生成日期:需要当前的日期或当前的时间。
  2. 设置日期显示:将日期变为你想要的格式(显示形式)。
  3. 用于计算:比较大小,加减形式(作为判断标准或生成某些值)
  4. 用于生成序列:生成日期序列

python mongo find 日期 大于 python处理日期数据_sed

实操

生成日期

手动生成

主要针对的场景是想将年,月,日以excel 的date函数一样的处理,以实现将年月日组合在一起生成可运算的对象。

#### 以年2020 月10 日20为例 生成。
import pandas as pd 
import datetime as dt

yield_date = pd.datetime(2020,10,20)
print(yield_date)
#生成结果: datetime.datetime(2020, 10, 20, 0, 0)

yield_date = dt.date(2020,1,20)
print(yield_date)
yield_date = dt.datetime(2020,1,20)
print(yield_date)
#生成结果1:2020-01-20
#生成结果2:2020-01-20 00:00:00
获取当前日期
###获取当前日期,获取当前时间
pd.datetime.now()
##结果:datetime.datetime(2021, 4, 21, 21, 45, 36, 484684)
pd.datetime.today()
##结果:datetime.datetime(2021, 4, 21, 21, 46, 47, 303536)

dt.datetime.today()
##结果:datetime.datetime(2021, 4, 21, 21, 47, 47, 386712)
dt.datetime.now()
##结果:datetime.datetime(2021, 4, 21, 21, 48, 10, 76806
字符串转化

将字符串转化为可处理的日期类型,一种是to_datetime 不需要指定和拆解比较智能; 另外一种方式是需要对字符串进行拆解: X.strptime(date_str,‘date_format’)

###pandas.to_datetime 这是一个比捷的方式,将字符串类型的日期转换为 日期型

date_str = '2021-04-21 10:00:00'
pd.to_datetime(date_str)
##显示的结果:Timestamp('2021-04-21 10:00:00')

### X.strptime(date_str,'date_format')
### X 可以是 pd.datetime  也可以是 dt.datetime
dt.datetime.strptime(date_str,"%Y-%m-%d %H:%M:%S")
##显示结果:datetime.datetime(2021, 4, 21, 10, 0)
pd.datetime.strptime(date_str,"%Y-%m-%d %H:%M:%S")
##显示结果:datetime.datetime(2021, 4, 21, 10, 0)

生成日期序列

列表循环式生成日期列表
### 提供的日期base是可计算的日期
base = datetime.datetime.today()
### 生成连续的日期列表。
date_list = [base - datetime.timedelta(days=x) for x in range(numdays)]
使用pandas.date_range生成
### 
'''
pandas.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, **kwargs)
Parameters
startstr or datetime-like, optional
Left bound for generating dates.

endstr or datetime-like, optional
Right bound for generating dates.

periodsint, optional
Number of periods to generate.

freqstr or DateOffset, default ‘D’
Frequency strings can have multiples, e.g. ‘5H’. See here for a list of frequency aliases.

tzstr or tzinfo, optional
Time zone name for returning localized DatetimeIndex, for example ‘Asia/Hong_Kong’. By default, the resulting DatetimeIndex is timezone-naive.

normalizebool, default False
Normalize start/end dates to midnight before generating date range.

namestr, default None
Name of the resulting DatetimeIndex.

closed{None, ‘left’, ‘right’}, optional
Make the interval closed with respect to the given frequency to the ‘left’, ‘right’, or both sides (None, the default).

**kwargs
For compatibility. Has no effect on the result.
'''
###示例:
pd.date_range(start='1/1/2018', periods=5, freq='M')
DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30',
               '2018-05-31'],
              dtype='datetime64[ns]', freq='M')

参数很好理解,但freq的取值需要解释一下,这里贴出来供大家参照。

python mongo find 日期 大于 python处理日期数据_字符串_02

显示日期

把日期类型转换为各种类型的字符串形式

dt.date.strftime()
dt.datetime.strftime()
pd.datetime.strftime()
d.strftime("%d/%m/%y")
'11/03/02'
d.strftime("%A %d. %B %Y")
'Monday 11. March 2002'

python mongo find 日期 大于 python处理日期数据_字符串_03

日期计算

主要牵涉到dt.timedelta的运用,以下:

日期与日期之间的时间间隔
dt.date(2021,3,15) - dt.date(2021,1,1)
## 得到:datetime.timedelta(days=73)
日期与日期时间间隔的计算
##2021年4月21日 23时14分运行。
##timedelta 可接收参数days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0
dt.datetime.today() - dt.timedelta(days=1)
datetime.datetime(2021, 4, 20, 23, 14, 34, 874919)