在用Electron做PC软件,需要同步服务器时间.
避免因为本地设置时间异常导致上传上来的数据异常
方案已更新,废弃node-windows,采用child-process
前因
毕竟Electron是支持Native API的.
那么设置PC的系统时间应该问题不大~
搜索引擎走起~
Bing、Baidu、Google
输入Electron 修改系统时间
啪的一下~
网速很快啊~
结果牛头不对马嘴
搜索引擎不给力啊…
也许是我关键词不对,曲线救国走起~
尝试
VUE 修改系统时间
NodeJS 修改系统时间
JS 修改系统时间
牛头不对马嘴+1、+2、+3
直到我灵机一动,我机智的尝试了一把我的散装英语
nodejs setSystemTime
然后我找到了这个
Node.js - Set system date / time
StackOverFlow 老哥牛逼~~~
StackOverFlow 老哥牛逼~~~
StackOverFlow 老哥牛逼~~~
照葫芦画瓢
既然老哥都给出了方法,那岂不是稳如老狗.
npm i node-windows
先把这个组件库搞下来,然后照葫芦画瓢
贴一下代码
//这里入参是服务器返回给我的 字符串类型的时间戳
notifySysTime(time) {
let baseTime = moment(parseInt(time)).format()
console.log('服务器转换时间0:~~~~~~~~~~~', baseTime)
let dateTime = new Date(baseTime)
console.log('服务器转换时间1:~~~~~~~~~~~', dateTime)
let year = dateTime.getFullYear()
let month = dateTime.getUTCMonth() + 1
let day = dateTime.getDate()
let h = dateTime.getHours() < 10 ? '0' + dateTime.getHours() : dateTime.getHours()
let mm =dateTime.getMinutes() < 10 ? '0' + dateTime.getMinutes() : dateTime.getMinutes()
let s =dateTime.getSeconds() < 10 ? '0' + dateTime.getSeconds() : dateTime.getSeconds()
let updateDate = `${year}-${month}-${day} ${h}:${mm}:${s}`
let updateTime = `${h}:${mm}:${s}`
console.log('服务器转换时间2:~~~~~~~~~~~', updateDate+"~~~"+updateTime)
win.elevate(`cmd /c date ${updateDate}`)
win.elevate(`cmd /c time ${updateTime}`)
},
3个log输出的分别是:
服务器转换时间0:~~~~~~~~~~~ 2021-11-23T20:24:57+08:00
服务器转换时间1:~~~~~~~~~~~ Tue Nov 23 2021 20:24:57 GMT+0800 (中国标准时间)
服务器转换时间2:~~~~~~~~~~~ 2021-11-23 20:24:57~~~20:24:57
cmd /c date & cmd /c time
为什么这个命令就可以呢?
cmd自不必多说.
/c 表示Close,执行完自动关闭窗口.
相同的还有一个 /k 表示Keep,执行完窗口还开着.
其实就是相当于仔细了这2个 命令,然后把服务器时间传进来了而已.
后续如果类似的需要通过cmd来解决的问题,就可以直接举一反三了.
最新版(node-windows废弃)
node-windows因为存在一个问题,也就是 Mac环境完全不兼容.
使用了这个组件会导致 Electron程序运行直接白屏,然后会在控制台输出告诉你 无法使用.
导致连用Mac开发Electron项目都做不到…
使用child-process
const { exec } = require('child_process')
//判断当为windows操作系统时才调用
if (process.platform == 'win32') {
exec(`date ${updateDate}`)
exec(`time ${updateTime}`)
}