标题: [数值计算] [已解决]批处理搭配curl命令如何实现:同步日期和时间到本地电脑? [打印本页]
作者: ygqiang 时间: 2016-7-19 12:54 标题: [已解决]批处理搭配curl命令如何实现:同步日期和时间到本地电脑?
本帖最后由 pcl_test 于 2016-7-19 14:00 编辑
[已解决]批处理,搭配curl命令,如何实现:年代、日期、时间,一起同步到本地电脑?- @echo off&setlocal enabledelayedexpansion&cls
-
- echo 同步年代、日期、时间到本地电脑
-
- ::==============================================================
- for /f "tokens=2,3 delims= " %%a in ('curl time.nist.gov:13') do (
- set "riqi=%%a"
- set "hh=1%%b"
- set /a "h=(!hh:~0,3!%%100+8)%%24"
- echo !riqi!
- echo !h!!hh:~-6!
- 1pause
- echo !riqi!|date
- echo !h!!hh:~-6!|time
- )
- ::==============================================================
-
- echo 按任意键退出&pause>nul
-
- exit
-
-
- curl time.nist.gov:13>1.txt
复制代码
作者: pcl_test 时间: 2016-7-19 13:34
date %格式化后的日期%&time %格式化后的时间%
作者: ygqiang 时间: 2016-7-19 13:50
本帖最后由 pcl_test 于 2016-7-19 13:54 编辑
回复 2# pcl_test
多谢。。搞定了。修改在顶楼
作者: pcl_test 时间: 2016-7-19 17:00
回复 3# ygqiang
如果同步发生在凌晨,你不需要解决日期的更替问题?
作者: ygqiang 时间: 2016-7-19 18:10
回复 4# pcl_test
嗯?这个情况,是啥意思?没考虑到。
作者: pcl_test 时间: 2016-7-20 14:21
- /*&cls
- @echo off
- set "netpath=%systemroot%\Microsoft.NET\Framework"
- for /f "delims=" %%a in ('dir /ad /b "%netpath%\v?.*"') do (
- if exist "%netpath%\%%a\csc.exe" (
- set "cscpath=%netpath%\%%a\csc.exe"
- goto :0
- )
- )
- echo;未安装.Net Framework 2.0及其上版本组件或相关程序丢失&pause&exit
- :0
- if not exist $SetDateTime.exe ("%cscpath%" /out:$SetDateTime.exe "%~f0")
- echo;
- echo;手动运行$SetDateTime.exe
- ping -n 4 0 >nul&exit
- */
- using System;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Diagnostics;
- using System.Threading;
- class SetDateTime
- {
- private static byte[] result = new byte[512];
- static void Main(string[] args)
- {
- IPAddress ip = IPAddress.Parse(Dns.GetHostAddresses("time.nist.gov")[0].ToString());
- Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- try
- {
- clientSocket.Connect(new IPEndPoint(ip, 13));
- }
- catch
- {
- Console.WriteLine("连接服务器失败,程序将自动退出!");
- Thread.Sleep(3000);
- return;
- }
- int receiveLength = clientSocket.Receive(result);
- Match dtstr = Regex.Match(Encoding.ASCII.GetString(result, 0 ,receiveLength), @"\d+(-\d+){2}\s\d+(:\d+){2}");
- DateTime dt = DateTime.ParseExact(dtstr.ToString(), "yy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture).AddHours(8);
- Console.WriteLine("服务器当前日期时间为:{0}", dt.ToString());
- Process proc = new Process();
- proc.StartInfo.FileName = "cmd.exe";
- proc.StartInfo.Arguments = "/c date "+dt.ToShortDateString().ToString()+"&time "+dt.ToLongTimeString().ToString();
- proc.StartInfo.UseShellExecute = false;
- proc.StartInfo.RedirectStandardError = true;
- proc.Start();
- string err = proc.StandardError.ReadToEnd();
- Console.WriteLine(err != ""?err:"同步日期时间完成,请按任意键退出!");
- Console.ReadKey(true);
- }
- }
复制代码
作者: GNU 时间: 2016-7-20 14:51
如果条件允许的话,建议用系统自带的时间同步功能跟时间服务器之间保持时间同步。
也可以自己尝试搭建一个NTP服务器,将来找工作的时候说不定还是一个加分项。
企业里面一般不会采用你这样的脚本同步方案。
作者: ygqiang 时间: 2016-7-20 15:06
本帖最后由 ygqiang 于 2016-7-20 15:15 编辑
回复 6# pcl_test
echo;手动运行$SetDateTime.exe
ping -n 8 0 >nul
start "" "$SetDateTime.exe"
ping -n 4 0 >nul&exit
作者: pcl_test 时间: 2016-7-20 15:11
回复 8# ygqiang
“手动”是告诉你批处理只是为了生成程序,以后直接运行程序即可
作者: ygqiang 时间: 2016-7-20 15:17
本帖最后由 ygqiang 于 2016-7-20 15:22 编辑
回复 9# pcl_test
Console.WriteLine("连接服务器失败,程序将自动退出!");
Console.WriteLine(err != ""?err:"同步日期时间完成,请按任意键退出!");
Console.WriteLine("服务器当前日期时间为:{0}", dt.ToString());
多谢。这3个地方,如何去掉这种窗口提示信息。
需要的效果是:后台运行,后台静默同步。不显示任何窗口提示信息。
作者: pcl_test 时间: 2016-7-20 15:20
回复 10# ygqiang
Console.ReadKey(true);改为Thread.Sleep(3000);
作者: ygqiang 时间: 2016-7-20 15:23
回复 11# pcl_test
运行$SetDateTime.exe,
需要的效果是:后台运行,后台静默同步。不显示任何窗口提示信息。
作者: ygqiang 时间: 2016-7-20 16:42
回复 11# pcl_test
而且$SetDateTime.exe同步的时候,有时候几秒钟就同步成功。
也有很多时候,好几十秒也无法同步,提示连接服务器失败。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |