[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] [已解决]批处理如何获取指定网页上的日期时间(网络日期时间)并同步到本机?

本帖最后由 pcl_test 于 2016-5-25 00:26 编辑

/***********代码在从这里开始***********/

  1. @echo off
  2. title 获取网络时间,同步到本机(需联网)
  3. cd /d "%tmp%"
  4. (
  5. echo With CreateObject^("Microsoft.XMLHTTP"^)
  6. echo .open "get", "http://open.baidu.com/special/time/", False
  7. echo .send
  8. echo WScript.echo DateAdd^("s",CLng^(Left^(Split^(Split^(.responseText,"baidu_time("^)^(1^),")"^)^(0^),10^)^),"1969-12-31 20:00"^)
  9. echo End With
  10. )>gettime.vbs
  11. for /f "tokens=1*" %%i in ('cscript //nologo gettime.vbs') do date %%i & time %%j
  12. echo 本机系统时间设置完成!
复制代码



/***********代码在从这里结束***********/


拜托帮忙改一个这个批处理,原来是获取(http://open.baidu.com/special/time/)这里的时间,再用来更新到系统的,可是现在这个时间服务器打不开了。

PS:上面之所为1969年是因为我需要将获取到的时间,减去12个小时再更新到系统。

网上的资料我都有看过了,确实没有符合我这个需求的(主要是减12小时再更新到系统)如果会修改的请帮帮忙,感激不尽。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. (
  2.     echo With CreateObject("Microsoft.XMLHTTP"^)
  3.     echo    .open "GET", "http://time.tianqi.com/", False
  4.     echo    .send
  5.     echo    s = Split(Split(.responseText, "new Date(("^)(1^), "+"^)(0^)
  6.     echo End With
  7.     echo WSH.Echo DateAdd("s", s * 1, "1969-12-31 20:00"^)
  8. )>getTime.vbs
复制代码
1

评分人数

    • CatsTrip: 圆满的解决了我的问题!技术 + 1

TOP

回复 2# WHY

谢谢您,可以了使用了。祝您生活愉快!

TOP

回复 1# CatsTrip


    正常北京时间是11:00,更新时间以后是23:00

这是为啥?
  1. @echo off
  2. title 获取网络时间,同步到本机(需联网)
  3. cd /d "%tmp%"
  4. (
  5.     echo With CreateObject("Microsoft.XMLHTTP"^)
  6.     echo    .open "GET", "http://time.tianqi.com/", False
  7.     echo    .send
  8.     echo    s = Split(Split(.responseText, "new Date(("^)(1^), "+"^)(0^)
  9.     echo End With
  10.     echo WSH.Echo DateAdd("s", s * 1, "1969-12-31 20:00"^)
  11. )>getTime.vbs
  12. for /f "tokens=1*" %%i in ('cscript //nologo gettime.vbs') do date %%i & time %%j
  13. echo 本机系统时间设置完成!
  14. exit
复制代码
1

评分人数

TOP

回复 4# ygqiang


    楼主的需求是“减去12个小时再更新到系统”
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

本帖最后由 pcl_test 于 2017-4-4 18:49 编辑
  1. /*&cls
  2. @echo off
  3. rem 去掉下句中的echo;方可同步,否则只显示
  4. for /f "tokens=1*" %%i in ('cscript -nologo -e:jscript "%~f0"') do echo;date %%i&echo;time %%j
  5. pause&exit
  6. */
  7. function az(n){return n<10?'0'+n:n}
  8. var http = new ActiveXObject('MSXML2.XMLHTTP');
  9. http.open('POST','http://www.114time.com/api/time.php', false)
  10. http.send();
  11. var dt = new Date(http.ResponseText*1);
  12. //减去12个小时上句改为var dt = new Date(http.ResponseText*1-12*3600*1000);
  13. Y = dt.getFullYear();
  14. M = dt.getMonth()+1;
  15. D = dt.getDate();
  16. h = dt.getHours();
  17. m = dt.getMinutes();
  18. s = dt.getSeconds();
  19. WSH.echo(Y+'/'+az(M)+'/'+az(D)+' '+az(h)+':'+az(m)+':'+az(s));
复制代码

TOP

WHY 发表于 2016-5-23 22:34


请问一下
Split(Split(.responseText, "new Date(("^)(1^), "+"^)(0^)
这一句是什么意思啊?

我看到网页源代码里有这样一句:
new Date((1469696026+i+28800)*1000);i++;document.getElementById("times").innerHTML=now.toUTCString();}

能解释一下那句话的意思吗?谢谢指教。

TOP

回复 6# pcl_test

win7系统下,现在时间是2016年7月28日,19:06:15

这个执行以后,显示如下:
date 2016/07/28  time  07:06:15
如何修改代码,将时间加上12?谢谢了

TOP

回复 7# macangyekillua


    代码的作用是为了获取 "new Date((" 后面的一串数字 "1469696026"

Split(.responseText, "new Date((")(1) 把网页文本内容以 new Date(( 为分隔符分割为数组,取数组第2个元素,即:1469696026+i+...

然后,Split("1469696026+i+...", "+")(0) 以 + 为分隔符分割为数组,取数组第1个元素,即:1469696026

TOP

回复 9# WHY

谢谢指导了,还想请问一下,如果new date后面没有跟着数字那还能获取到时间吗?例如:

new Date().tolocalestring()+'星期'+'日一二三四五六'.charAt(new Date().getDay());",1000);

上面这样的,单位内网有个网站,首页有个时间,源码里只看到上面这一句,能有办法获取到网站的时间吗?再次感谢。

TOP

回复 10# macangyekillua


举个栗子,如下面网页
http://www.timedate.cn/worldclock/ti.asp
从源码看该html元素是没有日期时间数据的<span id="clock" class="sj"></span>,但经浏览器加载和解析后则带上了js生成的数据

所以可利用浏览器对象获取js生成的日期时间数据
vbs则如下
  1. Set ie = CreateObject("InternetExplorer.Application")
  2. ie.Visible = true
  3. ie.navigate "http://www.timedate.cn/worldclock/ti.asp"
  4. Do
  5. WSH.Sleep 500
  6. Loop Until ie.readyState = 4
  7. msgbox ie.Document.getElementByID("clock").innertext
  8. ie.quit
复制代码

TOP

回复 11# pcl_test

谢谢版主指教,我测试了一下,原来内网那个网站的时间是系统时间。

请问有什么办法如果网站没有提供时间的话,获取到网络时间吗?

TOP

返回列表