Python时间处理

在这里想做一个初学者的教程,会不断的更新下去,把学到的有关Python时间处理的内容总结起来。初学者笔记最重要的有两点,一个是要简洁,不要长篇大论,把要点讲明白就行,第二个是要符合二八原则,尽量抓住关键的东西,不要过分的追求大而全,优先掌握关键的20%内容就很可以了。

time模块

Python时间处理,绕不过去的就是time模块,虽然这个模块用来做时间处理并不是很便捷,但是作为Python的内置模块,还是需要掌握基本的用法的。

学习时间处理,我们首先要理解,什么是时间?

关于时间的概念,简单来说,分为两个意思,时刻和时长。时刻就是时间坐标轴上的一个点,时长是一个线段。

time模块是基本用法是用来处理时刻的,在time模块中,时刻有3种表示方式

  • 时间戳(timestamp),是从1970年1月1日零时刻开始的一个秒数。
  • 时间元组(time tuple),是time模块中,用整数组合来表示时刻的方法。
  • 格式化字符串(format string),就是我们日常的用字符串表示一个时刻,例如“2021-01-01 10:00:00”。

明确这3个概念,然后就可以学习time模块的几个基本的方法。

time.time()

返回一个浮点数,获取当前时间戳。

time.mktime(arg)

接收一个时间元组参数,返回对应的时间戳。

time.localtime(arg)

接收一个时间戳参数,返回对应的时间元组对象。不带参数,返回当前时刻对应的时间元组对象。

time.strftime(format_string,struct_time)

format_string表示一个格式化字符串的表示方式,用%Y表示4位年份,%m表示月,%d表示日,%H表示时,%M表示分,%S表示秒。通过不同的组合,来表示想要的字符串格式,例如使用"%Y-%m-%d %H:%M:%S"来表示"2021-01-01 10:00:00"这种格式,使用"%Y年%m月%d日"来表示"2021年1月1日"这种格式。

struct_time是一个时间元组。整个方法就是把一个时间元组按照指定格式,返回一个字符串。不带struct_time参数的时候,默认指当前时刻。

time.strptime(time_string,format_string)

将一个时间字符串转化成对应的时间元组。time_string和format_string要格式对应才能正确转换。

time.sleep(n)

这个方法,让当前线程沉睡(挂起)n秒。

简单总结一下,我感觉time模块掌握这6个方法就够了。time.time和time.sleep单独记,time.mktime和time.localtime是时间戳和时间元组的相互转换,time.strftime和time.strptime是字符串和时间元组的相互转换。

最后补充一个内容,就是时间元组对象struct_time对象的使用。struct_time对象可以简单理解为(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)这样一个包含9个元素的元组。可以使用元组下标的方式获取元素的值,也可以使用obj.tm_year属性的方式获取指定的值。

datetime模块

相比time模块,datetime模块在使用起来更方便,也更常用。

使用datetime模块,学会使用其中的datetime类和timedelta类就足够了。

datetime类

datetime类是datetime模块中表示日期时间的类,还有两个date类和time类,用法大同小异,不用单独学习。

导入使用: from datetime import datetime

学习一个类的使用,一般从两个方面,一是实例对象的创建,二是对象的属性和方法。

datetime类实例对象的创建

dt = datetime(year,month,day,hour,minute,second)

通过构造函数指定具体的数值来创建,以上参数默认值都是0.

dt = datetime.today() 或者 dt = datetime.now()

获取当前时刻的dt对象。

dt = datetime.fromisoformat(string)

通过string='2021-01-01 10:30:00'标准格式获取dt对象。

dt = datetime.fromtimestamp(n)

通过指定一个时间戳来创建。

dt = datetime.strptime(string,format_string)

类似time.strptime,将一个字符串转化成dt对象。

datetime类实例对象的属性

dt.year/dt.month/dt.day/dt.hour/dt.minute/dt.second

datetime类实例对象的方法

dt.isoformat() 返回标准字符串

df.isoweekday() 返回星期几

dt.timetuple() 返回time.struct_time类型

dt.strftime(format_string) 返回指定格式字符串

dt.timestamp() 返回对应的时间戳

timedelta类

前面说的时间类型都是时刻表达,下面说的timedelta类是时长的表达。

创建timedelta类实例对象

td = 两个时间对象的差值

td = timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

根据相应的时长来创建,比如,我想创建一个相距3天10小时的时长,就可以这样:

td = timedelta(days=3,hours=10)

timedelta对象的属性

td.days、td.seconds、td.microseconds只有这3个属性,其他的需要进行换算。

timedelta对象的方法

td.total_seconds()

是一个浮点数,表示td对象中包含的总秒数。

Pandas中的时间处理

3.1 Timestamp

Timestamp是pandas中时间类型的基础类。表示一个具体的时刻。Pandas中其他时间类型,归根结底,都会回归到Timestamp这个类。

Timestamp类可以单独进行创建。

pd.Timestamp(year,month,day,hour,minute,second) 通过一系列整数用构造函数创建。

pd.Timestamp(time_string) 通过表示时间的字符串进行创建。Pandas可以自动识别几乎所有常规意义上的字符串。

pd.Timestamp.now() 或者 pd.Timestamp.today() 获取当前时刻。

3.2 Timestamp对象的使用

当拥有一个Timestamp对象时,可以方便的使用对象的各种属性和方法。

属性:t.year/month/day/hour/minute/second还有其他很多,不一一列举。

方法:t.timestamp() 获取代表的时间戳

t.strftime(format_string) 获取指定字符串形式

t.timetuple() 或者代表的struct_time形式

方法还有很多,有需要再好好了解。

3.3 date_range()

date_range方法可以创建一组连续的时间,这里面每一个元素都是Timestamp类型的对象。

pd.date_range(start,periods,freq='D') start是一个字符串,表示起始时间;periods是一个整数,表示数量,freq表示频率,是一个字符串标识符,这里的D表示一天。freq有很多灵活的组合,在这里不展开详解。

pd.date_range(start,end,freq='D') start和end都是一个时间字符串,freq还是频率,这里限定的不是数量,而是开始和结束的值。

3.4 to_datetime()方法

在pandas时间处理中,经常出现大量的时间字符串,可以使用pd.to_datetime方法,快捷的把时间字符串转化成时间类型。

pd.to_datetime(seri) 处理的一般都是一个seri对象,seri对象是一组字符串类型,转换成时间类型。

3.5 dt属性

对于一个时间类型的seri对象,可以使用dt属性来操作时间。

比如:year = seri.dt.year

3.6 Timedelta

在pandas中同样也有时间间隔处理的对象。可以方便的处理时间计算。

1)创建

pd.Timedelta(value,unit)

value,是一个整数

unit,表示单位,day、hour、minute、second

pd.Timedelta(days,hours,minutes,seconds)

2)使用

属性:td.days/td.seconds

方法:td.total_seconds()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值