Python中time⽇期、时间格式转换
在我们⽇常的数据采集中,时间time的重要性⽏庸置疑的,因为它是衡量采集到的信息是否具有正确时效性的唯⼀因素。如果我们采集到的信息对于客户来说已经是过期的信息,这对于客户没有使⽤的价值,影响客户使⽤。
所以我们今天就来说说在⽇常采集中遇到的时间如何正确采集,保证信息的时效性。
1>.⾸先我们要获取当前的时间,才能有效的判断信息的时效性。
import datetime
#获取当前时间
gtime = w()
# #获取当前时间的年⽉⽇.day
year = w().year
month = w().month
day = w().day
2>.时间的格式化。在采集外⽂⽹站中常会遇到(Mar 09,2018\ Thu Jun 22 00:00:00 CST 2017),对照着进⾏匹配
%a星期的简写。如星期三为Web
%A星期的全写。如星期三为Wednesday
%b⽉份的简写。如4⽉份为Apr
%B⽉份的全写。如4⽉份为Aprilunix时间戳转换日期格式
%c: ⽇期时间的字符串表⽰。(如:04/07/1010:43:39)
%d: ⽇在这个⽉中的天数(是这个⽉的第⼏天)
%f: 微秒(范围[0,999999])
%H: ⼩时(24⼩时制,[0, 23])
%I: ⼩时(12⼩时制,[0, 11])
%j: ⽇在年中的天数 [001,366](是当年的第⼏天)
%m: ⽉份([01,12])
%M: 分钟([00,59])
%p: AM或者PM
%S: 秒(范围为[00,61],为什么不是[00, 59],参考python⼿册~_~)
%U: 周在当年的周数当年的第⼏周),星期天作为周的第⼀天
%w: 今天在这周的天数,范围为[0, 6],6表⽰星期天
%W: 周在当年的周数(是当年的第⼏周),星期⼀作为周的第⼀天
%x: ⽇期字符串(如:04/07/10)
%X: 时间字符串(如:10:43:39)
%y: 2个数字表⽰的年份
%Y: 4个数字表⽰的年份
%z: 与utc时间的间隔(如果是本地时间,返回空字符串)
%Z: 时区名称(如果是本地时间,返回空字符串)
%%: %% => %
#Mar 09,2018\ Thu Jun 2200:00:00 CST 2017
c_time = 'Mar 09,2018'
print(type(c_time)) #查看类型是--<str>
ctime = datetime.datetime.strptime(c_time,"%b %d,%Y")
print(ctime)
print(type(ctime)) #查看类型是--<class'datetime.datetime'>
3>.借助正则来提升匹配率
ctime = data.xpath('''//span[@class="time"]''').regex('(\d+-\d+-\d+ \d+:\d+:\d+|\d+-\d+-\d+ \d+:\d+|\d+-\d+-\d+|\d+-\d+ \d+:\d+)').datetime()
4>.对于时间⾥⾯包含汉字(年、⽉、⽇)(刚刚、分钟前、⼩时前、天前)
4.1.时间⾥⾯包含年、⽉、⽇---2018年3⽉15⽇ 12:25
import htmlparser #导包
ctime = htmlparser.Parser(data.xpath('''//span[@class="time"]''').text().replace('年', '-').replace('⽉', '-').replace('⽇', '')).datetime()
4.2.时间⾥⾯包含刚刚、分钟前、⼩时前、天前
ctime = data.xpath('''//span[@class="topic_time"]/text()''').text().strip()
if"刚刚"in ctime:
ctime = gtime - datetime.timedelta(minutes=1)
elif "分钟前"in ctime:
ctime = re.search(r'\d+', ctime).group()
ctime = gtime - datetime.timedelta(minutes=int(ctime))
elif "⼩时前"in ctime:
ctime = re.search(r'\d+', ctime).group()
ctime = gtime - datetime.timedelta(hours=int(ctime))
elif "天前"in ctime:
ctime = re.search(r'\d+', ctime).group()
ctime = gtime - datetime.timedelta(days=int(ctime))
else:
# return None
ctime = htmlparser.Parser(ctime).datetime()
5>.对于正⽂⾥⾯没有时间的,查看是否url⾥⾯含有时间的信息 v/sq/dwjl/gjjmlw/201802/t20180208_396922.shtml import re
post_url = 'v/sq/dwjl/gjjmlw/201802/t20180208_396922.shtml'
c_time = re.search('''t(\d{8})_''', post_url).group(1)
ctime = datetime.datetime.strptime(c_time, "%Y%m%d") - datetime.timedelta(0, 3600 * 8)
6>.时间戳的转化(如果采集的内容⾥⾯没有时间,可以查类似1548906627这样的⼀串数,打开
tool.chinaz/Tools/unixtime.aspx,测试⼀下是否是时间戳格式的)
如果确定是时间戳格式的
===============时间戳格式转换==============
c_time1 = '获取到的时间戳'
ctime = datetime.datetime.utcfromtimestamp(int(c_time1))
最后,此内容为⾃⼰整理所得,如有不适合你的情况,请另⾏其它⽅法解决。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论