【Python进阶(九)】——日期和时间

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972

   个人介绍: 研一|统计学|干货分享
         擅长Python、Matlab、R等主流编程软件
         累计十余项国家级比赛奖项,参与研究经费10w、40w级横向

【Python进阶(九)】——日期和时间,建议收藏!


该篇文章主要讲解了Python数据结构之日期和时间,通过代码演示相关定义、转换方法、计算方法、时间索引等,同时给出相关错误示范以加强使用理解。

1 日期和时间类型数据介绍

  在Python中,处理日期和时间主要有几种不同的类型,这些类型是通过Python的datetime模块提供的。这个模块定义了五种主要的数据类型来操作日期和时间:

  1. datetime.date:仅表示日期,不包含具体时间(时分秒)。
  2. datetime.time:仅表示时间,不包含日期。
  3. datetime.datetime:表示日期和时间。
  4. datetime.timedelta:表示两个时间点之间的差异(即时间间隔),如天、小时、分钟、秒等。
  5. datetime.tzinfo:是一个抽象基类,用于处理时区信息。在实际应用中,你通常会使用它的子类,如pytz库中的时区对象,而不是直接使用tzinfo

2 时间和日期类型的定义

  运行程序:

import datetime as dt
myTime = dt.time(12,34,59)#dt.time(时、分、秒)
print("myTime:",myTime)
print("myTime.hour:",myTime.hour)
print("myTime.minute:",myTime.minute)
print("myTime.second:",myTime.second)

dt.datetime(year = 2018,month = 3,day = 3)#datetime(年月日必选,其他为可选)
?dt.datetime#系统函数提示

  运行结果:

myTime: 12:34:59
myTime.hour: 12
myTime.minute: 34
myTime.second: 59
datetime.datetime(2018, 3, 3, 0, 0)
Object `dt.datetime#系统函数提示` not found.

3 时间和日期类型的定义报错示例

  运行程序:

dt.datetime(month=3,day=3,second=59)#报错,年为必选

  运行结果:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[36], line 1
----> 1 dt.datetime(month=3,day=3,second=59)

TypeError: function missing required argument 'year' (pos 1)

4 转换方法

  运行程序:

from dateutil import parser
date= parser.parse("3th of July,2018")#用dateutil包中的parer()进行日期格式转换
print(date)

date= parser.parse("2019-1-3")
print(date)

import pandas as pd
pd.to_datetime("3th of July,2018") #利用pandas包中的方法进行格式转换,返回值类型为Timestamp

import pandas as pd
pd.to_datetime("2019-1-3")

  运行结果:

2018-07-03 00:00:00
2019-01-03 00:00:00
Timestamp('2018-07-03 00:00:00')
Timestamp('2019-01-03 00:00:00')

5 转换方法错误案例

5.1 转换方法错误案例1

  运行程序:

dt.datetime("3th of July,2018")#报错:非标准时间格式

  运行结果:

TypeError                                 Traceback (most recent call last)
<ipython-input-76-ae7cd03854b5> in <module>
----> 1 dt.datetime("3th of July,2018")

TypeError: an integer is required (got type str)

5.2 转换方法错误案例2

  运行程序:

dt.datetime("2019-1-3")#报错:非标准时间格式

  运行结果:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-76-ae7cd03854b5> in <module>
----> 1 dt.datetime("3th of July,2018")

TypeError: an integer is required (got type str)

6 显示系统当前时间

  运行程序:

dt.datetime.now()

dt.datetime.today()

now=dt.datetime.now()
now.strftime("%W"),now.strftime("%a"),now.strftime("%A"),now.strftime("%B"),now.strftime("%C"),now.strftime("%D")#设置显示情况
#%W: 一年中的星期数:00-53
#%a:本地简化星期名称
#%A:本地简化月份名称
#%b:本地简化月份名称
#%B:本地完整月份名称
#%c:本地相应星期和时间表示

  运行结果:

datetime.datetime(2024, 8, 23, 0, 4, 9, 308680)
datetime.datetime(2024, 8, 23, 0, 4, 9, 311681)
('34', 'Fri', 'Friday', 'August', '20', '08/23/24')

7 计算时差

  运行程序:

d1=dt.datetime.now()
d2=dt.datetime(year=2017,month=3,day=3)
(d1-d2).days #时差天

  运行结果:

2730

8 时间索引

  运行程序:

index=pd.DatetimeIndex(["2018-1-1","2019-1-2","2018-1-3","2018-1-4","2018-1-5"])#设置时间索引
data=pd.Series([1,2,3,4,5],index=index)
data

data["2018-1-2"]#特定索引数据

data["2018"] #此时已经过滤掉2019的数据

data- data["2018-1-4"]#所有值减去特定日期数据

data


data.to_period(freq="D")#代表时间单位为天

data.to_period(freq="M")#代表时间单位为月

data- data[3] #减去第四个数据

data- data["20180104"]#减去2018年1月4日数据

  运行结果:

2018-01-01    1
2019-01-02    2
2018-01-03    3
2018-01-04    4
2018-01-05    5
dtype: int64
2
2019-01-02    2
dtype: int64
2018-01-01   -3
2019-01-02   -2
2018-01-03   -1
2018-01-04    0
2018-01-05    1
dtype: int64
2018-01-01    1
2019-01-02    2
2018-01-03    3
2018-01-04    4
2018-01-05    5
dtype: int64
2018-01-01    1
2019-01-02    2
2018-01-03    3
2018-01-04    4
2018-01-05    5
Freq: D, dtype: int64
2018-01    1
2019-01    2
2018-01    3
2018-01    4
2018-01    5
Freq: M, dtype: int64
2018-01-01   -3
2019-01-02   -2
2018-01-03   -1
2018-01-04    0
2018-01-05    1
dtype: int64
2018-01-01   -3
2019-01-02   -2
2018-01-03   -1
2018-01-04    0
2018-01-05    1
dtype: int64

9 period_range()函数

  运行程序:

pd.period_range("2019-1",periods=10, freq="D")#pd.period_range("起始时间",个数, 时间单位)

pd.period_range("2019-1",periods=10, freq="M")

  运行结果:

PeriodIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
             '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',
             '2019-01-09', '2019-01-10'],
            dtype='period[D]')
PeriodIndex(['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06',
             '2019-07', '2019-08', '2019-09', '2019-10'],
            dtype='period[M]')
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小墨&晓末

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值