NTP 授时(Network Time Protocol)核心解读,工控机electron程序自动联网授时案例

最近公司的工控机产品遇到一个问题,工控机是离线使用的,但是客户对于时间要求又比较高,要精确到秒,不能有太大误差。所以怎么能快速授时这个问题一直萦绕在我脑海里...

一、前提描述

公司的应用程序是一个electron开发的桌面端应用程序,安装在windows10系统中,内网使用,不联网,并且没有wifi功能。

二、灵感来源

周末逛商场,看到一个卖家居的大卖场,路过一排时钟的货架,超级多好看的时钟,正在我惊叹于好久没看到这么多精美的时钟的时候,一个二维码赫然出现在我眼前,链接wifi后自动校时的wifi挂钟,手机共享热点也可以完成wifi链接

时钟联网调整时间

我心想,"我靠,我怎么没想到还能有这种操作?"

好吧,其实我之前想到了我们产品能怎么联网调整一下时间,但是思路受限就没有继续往下思考。

视频中是通过wifi进入一个设置网页,实现定时设置时间的。

三、解决思路

我想的是人为定期点击一个按钮,实现一键校准时间的功能:

  • 1、手机通过usb数据线连接工控机usb接口,开启手机USB网络共享功能,让工控机联网
  • 2、在设置界面添加"在线授时"按钮,弹窗提示实现授时流程
  • 3、用户选择NTP服务器点击完成授时

关键点 就是ntp-clientsudo-prompt两个库的使用,ntp-client实现从NTP 服务器获取时间,sudo-prompt实现让Node.js/Electron 程序以「管理员 / 超级用户权限」执行系统命令,解决普通权限下无法操作系统级功能的问题。

遇到的小问题 ,测试过程中发现,命令行手动更新时间失败,原因是错误核心原因:Windows 系统区域 / 语言设置为中文(简体)时,date命令不识别MM-dd-yyyy(月 - 日 - 年)格式(如03-16-2026),中文环境下date命令默认要求「年月日」格式(如2026-03-16),导致执行date 03-16-2026提示 "系统无法接受输入的日期"。

此处关键 :美式区域用MM-dd-yyyy,中文区域用yyyy-MM-dd,月份与日需要前面补0

四、拓展学习NTP 授时(Network Time Protocol)

NTP(网络时间协议)是专门用于在计算机网络中同步所有设备系统时间的标准化网络协议,你可以把它理解成「网络世界的统一时间校准员」------ 解决不同设备(比如你的工控机、手机、服务器)因本地时钟漂移导致的时间不一致问题,是目前互联网最主流、精度最高的时间同步协议。

底层传输:基于 UDP 协议 (无连接、低延迟),固定使用123 端口,这是 IANA 为 NTP 专属分配的端口,所有合规 NTP 服务器都监听这个端口。

我是用的几个ntp服务器地址:

JavaScript 复制代码
//  国内NTP服务器列表(按优先级排序)
const NTP_SERVERS = ['cn.pool.ntp.org', 'ntp1.aliyun.com', 'ntp.ntsc.ac.cn', 'time1.cloud.tencent.com', 'cn.ntp.org.cn'];

总结

随心记录,哈哈

相关推荐
cindershade3 分钟前
用原生 HTML5 视频与 Canvas 实现浏览器端视频抽帧封面
前端
笨鸟先飞,勤能补拙5 分钟前
Web 服务器与计算机网络全景原理
运维·服务器·前端·网络·人工智能·计算机网络·web安全
NutShell Wang13 分钟前
Wails v3 Beta 实战:用显式对象模型重写你的第一个 Go 桌面应用
前端·人工智能·go·vibe coding
daols8814 分钟前
vue 甘特图 vxe-gantt 任务条拖拽自动更新日期
javascript·vue.js·甘特图
cindershade15 分钟前
前端国际化工程实践:语言包拆分、动态加载与日期数字格式统一
前端
kisbad23 分钟前
Day 036|OpenAI Agents SDK 快速开始:今天跑通第一个 Agent
java·前端·javascript
qq_2676128927 分钟前
Gitee CodePecker行业场景化落地指南:金融、车联网与IoT双引擎选型与工程化路径
前端·gitee·自动化
初晨未凉36 分钟前
elementui自定义内容图片预览
前端
无糖可可果2 小时前
从零读懂一个 Next.js 全栈笔记应用
前端
Maxkim2 小时前
DeepSeek Harness 源码深度分析:像 VS Code 一样插件化的 Agent 框架
前端·架构