python对日期时间处理

python处理时间的模块有三个:datetime,time,calendar;datetime模块主要是用来表示日期的,就是我们常说的年月日时分秒,calendar模块主要是用来表示年月日,是星期几之类的信息,time模块主要侧重点在时分秒,粗略从功能来看,
我们可以认为三者是一个互补的关系,各自专注一块。

1,time模块
1.1 时间的获取、表示、转换
time模块获取时间的基本方法:tt = time.time() # 1559201353.5570097
得到的是时间戳,即1970年1月1日0点(时间基准点epoch)到现在的秒数(浮点数),用的是UTC时间。

1.2 将时间戳转换为年月日时分秒格式
有两个转换方式,一个是UTC时间,一个是所在时区进行调整后的时间,得到的是struct_time
time.gmtime(tt)
st = time.localtime(tt)
#UTC时间输出:time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=7, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=0)
#当地时间输出:time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=15, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=0)

1.3 将struct_time转换为秒数
calendar.timegm()方法用来把UTC的struct_time(gmtime的返回对象)转为从epoch开始的秒数
time.mktime()用来把用时区调整过的struct_time(即localtime的返回对象)对象转为从epoch开始的秒数

1.4 在时间和表示时间的字符串之间进行转换
time模块中的strftime和strptime就是做这个用的。
看名字大家就应该知道它们的含义,
strftime 即 string format time,用来将时间格式化成字符串;
strptime 即string parse time,用来将字符串解析成时间。需要注意的是,这里的时间都是struct_time对象。
ss = time.strftime(’%y/%m/%d %H:%M:%S’,st)
r# 19/05/30 15:29:13
time.strptime(ss,’%y/%m/%d %H:%M:%S’)
r# time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=15, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=-1)

1.5 简单转换方式
asctime用来将一个struct_time对象转为标准24字符的字符串,如下所示:Sun Jun 20 23:21:05 1993;
ctime方法与asctime作用相同,只不过它接收的是秒数,在内部,会先把秒数通过localtime转为struct_time,再往后就与asctime一样了。
time.asctime(st)
time.ctime(tt)
r# Thu May 30 15:29:13 2019

2, datetime模块
简单说,该模块核心的类就三个,date类表示年月日,time类表示时分秒毫秒,这里不要和time模块搞混淆了。
2.1 创建datetime对象
dt=datetime.datetime.fromtimestamp(time.time())
以上,time.time()获得自epoch开始的秒数,fromtimestamp方法会将这个秒数转变成一个datetime对象。
这个datetime对象究竟是utc的还是local的?
答案是local的,这是该方法的默认行为。如果你在fromtimestamp方法中传入一个表示时区的参数,即tzinfo对象,就会按传入的时区信息进行转换。

获得表示当前local时间的datetime对象,还有两个简便方法:
datetime. datetime. now()
datetime. datetime. today()
以上我们得到的都是local的datetime对象,如何获得utc的datetime对象呢?
有两个办法:
datetime.datetime.utcfromtimestamp(time.time())
r# 2019-05-30 16:29:47.819607
datetime.datetime.utcnow()

2.2 从字符串中创建datetime对象
方法为datetime.striptime(date_string, format)
其内部还是先调用的time模块中的striptime方法,获取struct_time对象,再利用struct_time对象中的年月日时分秒信息构建datetime对象。
同样的,datetime类也提供了strftime(),asctime(),ctime()方法,相信不说你也知道是做什么的了。
datetime类还提供了一个combine方法,用来将一个date对象和一个time对象组合成一个datetime对象。
需要注意的是,datetime模块中出现timestamp时,一般可将其理解成time.time()返回的秒数

2.3 date和time的创建
date对象的创建和datetime非常相似,
datetime.date.today()
datetime.date.fromtimestamp()都可以创建一个date对象。
当然,你也可以通过构造方法传入年月日来创建date对象。
相比之下,time对象的创建就很有限,只能通过datetime.time([hour[, minute[, second[, microsecond[, tzinfo]]]]])这个方法创建

3,时间的加减
python中可以方便地对date对象之间,或者datetime对象之间进行小于(<)比较和减法(-)操作。
注意,这里仅限于同类对象之间,而且,不包括time对象之间。
两个date对象作减,或者两个datetime对象之间作减,差值用一个timedelta对象表示。
dt = datetime.datetime.fromtimestamp(time.time())
dt1 = dt - datetime.timedelta(seconds=10)
r# 2019-05-30 16:45:23.642651
r# 2019-05-30 16:45:13.642651

4,pandas中对时间的处理
数据处理中经常遇到时间的处理,pandas也有相应的模块。
将string转换为时间格式:pd.to_datetime(strtime)
su = pd.to_datetime(‘2019-05-29 16:45:23’)
r# 2019-05-29 16:45:23
提取日期等信息
df[‘begintime’].dt.hour()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值