分享一些对于日期类的操作的经验
1136浏览量
2评论
我们在爬虫采集过程中经常会涉及到对时间的操作,很多朋友对时间的操作都感觉到非常吃力,其实掌握了这些小技巧,你会发现时间操作还是非常简单的。
首先我们应该了解一下时间的格式,前嗅爬虫中的时间格式是有两种的,一种是时间戳,网上的定义是这样的:时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间戳(UnixTimestamp)。Unix时间戳(Unixtimestamp),或称Unix时间(Unixtime)、POSIX时间(POSIXtime),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中(比如Linux系统),也在许多其他操作系统中被广泛采用。在我们的爬虫系统中一般取的时间最多精确到秒,所以爬虫中的时间戳是从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
另一种时间格式就是我们常见的年月日时分秒的表示方法,一般网站上显示出来的yyyy-mm-dd hh:mm:ss的格式,这种格式往往是字符串类型的,在数据存储上是不如时间戳好用的,ForeSpider爬虫软件中将这种格式进行了优化,用一个数字来表示年月日时分秒的格式,在这里我们不妨称之为应用日期格式。
两种时间格式各有优劣,时间戳格式是long型的,拥有更高的效率,缺点是不直观;应用日期格式优点是直观,但是是string类型的,效率低。时间戳时间戳格式和应用日期格式可以相互转换的,能够灵活使用两种格式,那么对时间的操作就会非常简单了。
了解了这些概念我们就来看一下ForeSpider软件中提供的时间类。时间time类目前有8个成员变量,8个操作方法。
time 类
time 类为时间操作类,一旦申明便创建一个时间对象,默认值为当前时间。
一.类成员:
成员名称 | 成员类型 | 是否静态 | 成员描述 |
---|---|---|---|
year | int | 否 | 当前年份 |
month | int | 否 | 当前月份 |
day | int | 否 | 当前日期 |
week | int | 否 | 当前星期几 |
hour | int | 否 | 当前小时数 |
min | int | 否 | 当前分钟数 |
sec | int | 否 | 当前秒数 |
t0 | int | 是 | 返回当前时间对象从1970年的秒数 |
二.成员方法:
方法名称 | 返回值 | 是否静态 | 方法描述 | 参数表 |
---|---|---|---|---|
Preday(n=1) | time | 否 | 返回当前时间的前n天时间 | n:指定与今天偏离的天数,如果为负值则向后推 |
ToStr() | string | 否 | 把时间转换为yyyy-mm-dd hh:mm:ss | |
ToCn() | long | 否 | 把时间转换为yyyymmddhhmmss | |
GetCn() | long | 是 | 把当前时间转换为yyyymmddhhmmss | |
CnToStr(t) | string | 是 | 把cn时间转换为yyyy-mm-dd hh:mm:ss | t:cn时间数值[yyyymmddhhmmss] |
GetTime() | int | 是 | 返回当前的秒数【从1970-01-01 00:00:00】 | |
time(t) | int | 是 | time类构造函数 | t:从1970年到某时刻的秒数 |
time(year,month,day,hour,min,s) | int | 是 | time类构造函数 | year,month,day,hour,min,s:可填写1到6个参数,分别对应年、月、日、时、分、秒 |
time类的创建方式有两类3种
第一种是直接定义time类变量:
1.直接声明time t;这个时间对象默认值为当前时间
2.构造函数声明,第一种是对应时间戳格式的构造函数格式为time t = time(timestamp)传入一个秒数,返回一个时间对象;第二种是对
应应用日期格式的构造函数,格式为time t = time(year,month,day,hour,min,s)传入1-6个参数分别表示年月日时分秒,year参数是必须的,其他参数可省略,如果省略则month,day,hour,min,s会分别传入默认值1,1,0,0,0。
定义了time类变量之后就可以通过 对象名.成员名称 的方式获得成员变量的值了,例如定义time t,那么通过t.year就可以获得t变量所代表时间的年份了。
然后就是对时间的操作了,我们可以通过成员方法这张表简单了解一下成员方法,第一列是方法名称及参数,第二列是返回值类型,第三列是方法类型,静态方法就是可以通过类名直接调用的方法,例如GetTime()方法可以直接用time.GetTime()进行调用;非静态的方法则必须通过声明一个time变量,通过变量名来调用,ToStr()方法是非静态方法,使用time.ToStr()是不合法的,必须声明一个变量time t,t.ToStr()的方式来调用。当然静态方法也是可以通过变量名来调用的。
下面我举几个简单的例子来帮助大家了解一下这些方法的使用
1.一般我们在爬虫采集过程中要获取采集时间时,我们可以写以下的一段脚本来获取当前时间
record rs;
var cn = time.GetCn(); //把当前时间转换为cn时间yyyymmddhhmmss
rs.getTime = time.CnToStr(cn); //把cn时间转换为yyyy-mm-dd hh:mm:ss
/*注:cn时间就是yyyymmddhhmmss格式的时间*/
除了上面的脚本我们也可以使用下面的脚本来获取当前时间
record rs;
time t; //声明一个time对象t,默认为当前时间
rs.getTime = t.ToStr(); //把时间转换为yyyy-mm-dd hh:mm:ss
两段脚本都是可以实现功能的,在这里我更倾向于使用第二种方法。有时候我们可能只需要年月日yyyy-mm-dd或时分秒hh:mm:ss,也就是时间字符串的一部分,其实这个操作就非常简单了,直接使用字符串操作方法就可以做,大家可以查看字符串类相关方法进行操作。
2.有时候我们需要采集网页上显示的时间,例如采集贴吧时会有一个发帖时间,在网页上看到的时间都是通过时间戳处理得到的,我们在脚本中如果想进行同样的转换也是有特定的方法的,下面这段脚本就是用来转换时间戳类型的时间的
record rs;
var timeStamp = 16089906000155; //模拟网页上采集的时间戳变量
var seconds = timeStamp/1000; //毫秒数转变成秒数
var t = time(seconds); //生成时间对象
rs.postTime = t.ToStr(); //转换成yyyy-mm-dd hh:mm:ss格式
/*对于时间戳与应用日期格式的相互转换可以查看这个链接 http://tool.chinaz.com/tools/unixtime.aspx*/
3.我在配置模板的过程中还遇到了一种情况在这里也和大家分享一下。我们常见有倒计时的网站,例如NBA相关网站中会出现距离某场比赛还有2小时30分这样的情况,但是实际查看网页时发现只有一个表示比赛时间的时间戳,那么这些倒计时又是怎么得到的呢,下面这段脚本将展示如何计算时间差。
/*实际的倒计时一般是当前时间距离事件发生时间的时间差,那么我们就需要获得当前时间*/
var timeStamp = 16089906000155; //模拟网页上采集的时间戳变量
var airTime = timeStamp/1000; //事件发生时间的秒数
var nowTime = time.GetTime; //当前时间的秒数
var interval = airTime-nowTime; //获取时间差秒数
/*下面就是通过秒数来计算小时数分钟数和秒数hh:mm:ss这样的时间差了,有时候会有天数*/
//这里假设时间间隔interval = 96030;
var day = interval/(24*60*60); //计算天数; day = 1
interval = interval%(24*60*60); //计算剩余时间 interval = 9630
var hour = interval/(60*60); //计算小时数 hour = 2
interval = interval%(60*60); //计算剩余时间 interval = 2430
var min = interval/60; //计算分钟数 min = 40
var sec = interval`; //计算秒数 sec = 30
var str = "倒计时" day "天" hour "小时" min "分钟" sec "秒"; //生成倒计时 str = "倒计时1天2小时40分钟30秒"
这是我在学习过程中遇到的一些应用,希望能够帮助大家加深对时间类的理解。如果大家有什么疑问可以在下边评论区回复哟。
- ·ForeSpider入门教程 26208
- ·ForeSpider数据采集系统功能说明 17155
- ·软件用途 16576
- ·软件功能 16419
- ·ForeSpider数据采集特点 15661
- ·创建表单的视频教程 15581
- ·采集策略相关概念 15426
- ·频道相关概念 15193
- ·表单相关概念 14825
- ·免费代理IP网址大全 14168
评论区
+ 写评论