ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 11669|回复: 14

[分享] 网抓知识(时间戳)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-9-23 11:22 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 onlycxb 于 2015-9-28 21:59 编辑

网页数据获取,不可避免会遇到时间问题。
      什么是时间戳?
      时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间。数字时间戳技术是数字签名技术一种变种的应用,是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中(比如Linux系统),也在许多其他操作系统中被广泛采用。[此段文字摘自百度]

      下面, 我们以网抓过程中最常用的javascript和VBscript为例,分别给出时间与时间戳的转换方式。

下面是北京时间与时间戳的对比,我们可以利用此数据做为测试。
捕获.PNG
     一、标准时间---->时间戳

      方法1:利用javascript方法实现
  1. Sub javascript时间戳生成()'10位数字
  2.     With CreateObject("MSScriptControl.ScriptControl")
  3.         .Language = "javascript"
  4.         .addcode ("function a(){return Math.round(new Date().getTime()/1000)}")
  5. Debug.Print .eval("a()")'立即窗口输出
  6.     End With
  7. End Sub
复制代码
      方法2:VBscript实现
  1. Sub VBscript时间戳生成()'10位数字
  2. Debug.Print DateDiff("s", "01/01/1970 00:00:00", Now())  's秒
  3. End Sub
复制代码
二、时间戳---->标准时间

方法1:利用javascript实现
  1. Sub javascript时间戳()'10位数字
  2.     Dim t, MyDatetime As Date
  3.     t = "1442975474 "
  4.     With CreateObject("MSScriptControl.ScriptControl")
  5.         .Language = "javascript"
  6.         .addcode ("function a(t){return  new Date(t * 1000).toLocaleString();}")
  7.         MyDatetime = .eval("a(" & t & ")")
  8. Debug.Print MyDatetime
  9. Debug.Print Format(MyDatetime, "yy-mm-dd hh:mm")'这里加入格式输出
  10.     End With
  11. End Sub
复制代码




方法2  :利用Vbscript实现
  1. Sub VBscript时间戳1()'10位数字
  2.     t = "1442975474"
  3. Debug.Print DateAdd("s", t, "01/01/1970 08:00:00")
  4. End Sub
复制代码


  1. Sub VBscript时间戳2()'10位数字
  2. Dim t
  3.     t = "1442975474"
  4. Debug.Print t / 60 / 60 / 24 + #1/1/1970 8:00:00 AM#
  5. End Sub
复制代码

             上述代码,仅指10位数字时间(精确至秒)转换,在网抓过程和数据库应用中非常普遍,整理在此以便坛友查阅,不当之处请斧正!



评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-23 15:18 | 显示全部楼层
本帖最后由 onlycxb 于 2015-9-23 15:26 编辑

13位时间生成函数
  1. Function GetLongTime()
  2.     With CreateObject("msscriptcontrol.scriptcontrol")
  3.         .Language = "JavaScript"
  4.         GetLongTime = .eval("new Date().getTime();")
  5.     End With
  6. End Function

复制代码
上述函数会产生一个 表示时间的13位数字。与一楼的差别就是该数字精确到毫秒

TA的精华主题

TA的得分主题

发表于 2015-9-23 20:35 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-23 20:40 | 显示全部楼层
liucqa 发表于 2015-9-23 20:35
提供一个64位下的示例吧

至今还没用过64位版本呢,前辈如有请指点!

TA的精华主题

TA的得分主题

发表于 2015-9-23 21:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
onlycxb 发表于 2015-9-23 20:40
至今还没用过64位版本呢,前辈如有请指点!

嗯,我也没有,所以等你写呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-25 14:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liucqa 发表于 2015-9-23 21:38
嗯,我也没有,所以等你写呢

突然想到:    t / 60 / 60 / 24 + #1/1/1970 8:00:00 AM#这个64位下应该没问题吧。

TA的精华主题

TA的得分主题

发表于 2015-9-25 14:19 | 显示全部楼层
onlycxb 发表于 2015-9-25 14:12
突然想到:    t / 60 / 60 / 24 + #1/1/1970 8:00:00 AM#这个64位下应该没问题吧。

用公式的都没问题。

其实,我只是不赞成vba里面使用js脚本

TA的精华主题

TA的得分主题

发表于 2016-10-25 16:27 | 显示全部楼层
本帖最后由 周星骋 于 2016-10-25 16:32 编辑

学习楼主分享的知识,我来测试一下
13位时间戳 转成 北京时间
  1. Sub test()
  2.     Debug.Print Format(19 + 70 * 365 + (8 * 3600 + Left(1313131313131#, 10)) / 86400, "yyyy年MM月DD日HH时mm分ss秒") & Right(1313131313131#, 3) & "毫秒"
  3. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-12-22 15:04 | 显示全部楼层
怎样可以知道网页有没有用时间戳呢?
怎么看这个网页的时间戳类型?

TA的精华主题

TA的得分主题

发表于 2017-8-18 15:13 | 显示全部楼层
楼主,标准时间转时间戳中的DateDiff("s", "01/01/1970 00:00:00", Now())的结果好像差了八个小时吧。
是不是应该改成DateDiff("s", "01/01/1970 08:00:00", Now())。
感谢分享!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-2-3 06:47 , Processed in 0.026033 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表